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



страница1/12
Дата21.11.2017
Размер1.86 Mb.
  1   2   3   4   5   6   7   8   9   ...   12
Ръководството е предназначено за семинарни и лабораторни упражнения по програмиране І част в Шуменския университет “Константин Преславски”, но може успешно да бъде използвано и в други ВУЗ, както и за обучение по програмиране на базата на езика С++ в профилираните паралелки на средните училища. Тъй като е предназначено за упражнения, теоретичните бележки в него са ограничени и сбити. Предполага се, че обучаемите ще разполагат и с учебник, който изчерпателно ще ги разглежда. Помагалото предлага голямо количество решени задачи и задачи за упражнение.

В ръководството са публикувани лабораторните практикуми, които се провеждат по дисциплината програмиране І част в Шуменския университет “Константин Преславски” и са изготвени от екипа, ръководещ тази дисциплина: Бисерка Йовчева, Емануил Стоянов и Божидар Стоянов. Лабораторните практикуми са публикувани без допълнителна редакция със съгласието на колегите, за което авторите на помагалото сърдечно благодарят.



Съдържание:



  1. Алгоритми 3

  2. Етапи при решаване на задача за програмиране 10

  3. Програмно осигуряване на съвремените компютри (обобщение) 13

  4. Системи за програмиране 15

  5. Системата за програмиране Borland C++ 17

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

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

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

  9. Въвеждане и извеждане на данни в С програма 37

  10. Лабораторен практикум №1. Линейни алгоритми 48

  11. Проверка на условие. Логически операции. Условна операция. Условен оператор if. 49

  12. Лабораторен практикум №2. Разклонени алгоритми 60

  13. Оператор за избор на вариант 62

  14. Лабораторен практикум №3. Оператор за избор на вариант 69

  15. Оператори за цикъл. Оператор за цикъл do-while 71

  16. Оператор за цикъл while 77

  17. Оператор за цикъл for 81

  18. Циклични алгоритми 85

  19. Лабораторен практикум №4. Циклични алгоритми 105

  20. Лабораторен практикум №5. Теория на числата 107

  21. Функции 108

  22. Лабораторен практикум №6. Функции 115

  23. Масиви 116

  24. Лабораторен практикум №7. Масиви 128

  25. Използвана литература 129


Алгоритми

  1. Що е алгоритъм?

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

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

Понятието алгоритъм произлиза от името на средноазиатския математик Мохамед ибн Муса ал Хорезми (от град Хорезми, днес Хива в Узбекистан), живял в периода между 780 и 850 година. В своите математически съчинения той е описал алгоритмите за четирите основни аритметични операции. Приема се, че това са едни от първите описания на алгоритми.

Да разгледаме няколко примера:



Пример 1:

Алгоритъм за намиране периметъра на правоъгълник.


  1. Определя се дължината а и ширината b на правоъгълника.

  2. Пресмята се периметъра Р на правоъгълника по формулата: Р = 2(a+b)

  3. Съобщава се Р.


Пример 2:

Алгоритъм за намиране корена х на уравнение от вида

а.х = b


  1. Определят се коефициентите а и b на уравнението;

  2. Пресмята се х по формулата: х = а:b

  3. Съобщава се x.


Пример 3:

Алгоритъм за намиране на най-голямото от три числа


  1. Определят се числата a, b и c.

  2. На m се присвоява а.

  3. Ако b>m, на m се присвоява стойността на b.

  4. Ако c>m, на m се присвоява стойността на с.

  5. Съобщава се m.

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


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

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



  1. Основни характеристики на алгоритмите

а) масовост - алгоритъмът трябва да може да решава възможно най-голям клас задачи. Например, ако бяхме написали предписание за пресмятане на периметъра на правоъгълник със страни 5 и 2, то нямаше да е алгоритъм, тъй като решава само една конкретна задача. Веднага можем да забележим, че и трите алгоритъма, които описахме имат тази характеристика.

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

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

Ясно е, че първият от примерните алгоритми винаги е резултатен, защото входните данни са дробни числа и с тях трябва да се извършват операциите + и -, които са допустими за всички числа и винаги прилагането им води до получаване на резултат. Не е така, обаче с втория пример: Ако се опитаме да намерим х, при а=0 и b=5, изпълнявайки алгоритъма ще се натъкнем на операцията деление на 0, която не е допустима за никои две числа. Все пак добре знаем какво би трябвало стандартно да отговори нашият алгоритъм: в този случай: "няма решение", докато в случая когато а=0 и b=0, резултатът от изпълнението на алгоритъма трябва да бъде съобщението "всяко х е решение". Ето защо се налага да коригираме описанието на този алгоритъм, съобразно с последното изискване.



Алгоритъм за намиране корена х на уравнение от вида

а.х = b (втори вариант)


    1. Определят се коефициентите а и b на уравнението;

    2. Проверява се стойността на а;

    3. Ако a=0, се проверява стойността на b;

    1. Ако b=0, се съобщава: "всяко х е решение"

    2. Ако b0, се съобщава: "няма решение"

    1. Ако а0, се пресмята х по формулата: х = а:b и се съобщава х.

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

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

а) словесно описание – алгоритъмът се описва с думи на един от говоримите езици. Така описахме трите примерни алгоритъма, които разгледахме.

Веднага се забелязват три основни недостатъка на словесното описание:



  • много е обемно и трудоемко;

  • разбираемо е само за хора, знаещи съответния език;

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

Ето защо се налага да се търсят други средства за описание на алгоритмите.

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

Ето основните блокове, които се използват при описанието на блок-схеми:



  • блок за начало – представлява овал, в който не влиза нито една стрелка, а излиза само една. Използва се за посочване на началото на алгоритъма (фиг. 1);

  • б
    лок за край
    - представлява овал, от който не излиза нито една стрелка, а влиза само една. Използва се за посочване на края на алгоритъма (фиг. 2);

  • блок за вход – оформя се като трапец, чиято голяма страна е отгоре. В този блок влиза само една стрелка и излиза само една. Означава, че в алгоритъма се въвеждат някакви стойности на величини, посочени в блока (фиг. 3).

  • б

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

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

  • у

    словен блок
    – има форма на ромб и в него е записано някакво условие, което трябва да се провери. В блока влиза само една стрелка, а излизат точно две – едната се означава с “да”, а другата – с “не”. В блока се проверява условието и ако е истина изпълнението на алгоритъма продължава по посока на стрелката, означена с “да”, в противен случай – по посока на “не” (Фиг. 6).

  • б
    лок-подалгоритъм
    – обединява съвкупност от елементарни действия, оформени като самостоятелен алгоритъм. Блокът е шестоъгълен и има един вход и един изход. В описанието на алгоритъма се приема, че преминавайки през този блок изпълнителят извършва всички елементарни действия, предвидени в подалгоритъма (Фиг. 7).

  • б
    лок за пренос
    – използва се когато алгоритъма трябва да се пренесе на друга страница или на друго място на същата страница. Той е кръгъл и в него се записва число. Има два вида блока за пренос – изходен и входен. В първия само влиза стрелка, а във втория само излиза. На всеки един изходен блок за пренос трябва да съответства входен със същото число записано в него. Това означава, че алгоритъма, след като премине през изходния блок за пренос продължава от там, където сочи входния блок (фиг. 8).

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




Пример 3:

Алгоритъм за намиране на най-голямото от три числа (фиг. 11)




в) чрез езици за програмиране – езиците за програмиране позволяват алгоритмите да бъдат изразени на език, разбираем от компютрите. Тук ще представим описание на трите алгоритъма съответно на е
зиците P
ascal
и C++.



Етапи при решаване на задача по програмиране

Ще опишем етапите при решаване на задача по програмиране, използвайки като илюстрация следния пример:



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

  1. Създаване на математически модел на задачата

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

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







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

Известно е, че когато са дадени трите страни на триъгълник, лицето му може да бъде изчислено по Хероновата формула:

, където

След като пресметнем лицето, вече можем да изразим височините от описаните по-горе формули:







По този начин уточнихме математическите похвати, използвани при решаване на задачата и построихме нейния математически модел.



  1. Създаване на информационен модел на задачата

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

Ето как ще изглежда информационния модел на разглежданата от нас задача:



Входни данни:

Променливите a, b, c. Те са реални1 променливи. Програмата трябва да получи стойностите им от потребителя като вход.



Изходни данни:

Променливите ha, hb, hc. Те също са реални променливи. Тях програмата извежда след необходимите пресмятания.



Междинни резултати:

За да се пресметнат височините, ще се наложи да се получат междинни резултати, като полупериметъра и лицето на триъгълника. Ето защо ще използваме дробни променливи и за двете величини: S, p.



  1. Описание на алгоритъма

Алгоритъма се описва чрез блок-схема или словесно. Ще изберем кратко словесно описание.

Въвеждат се дължините на страните на триъгълника a, b, c.

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

Пресмята се лицето на триъгълника по Хероновата формула.



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







Извеждат се трите височини ha, hb, hc.



  1. Кодиране на алгоритъма

Алгоритъмът се описва на избрания език за програмиране. В нашия случай програмата, която решава задачата е написана на езика С++.

#include

#include

void main()

{

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

cin>>a>>b>>c;

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=”<

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


База данных защищена авторским правом ©obuch.info 2016
отнасят до администрацията

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