Всього книг:

139

Останнє оновлення:

 2012-02-24 10:46:24

 

Реклама

 




 

 

Наші Друзі

rozvAGA!info - Приколи,фото,дівчата,он-лайн ігри,форум,телепрограма

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Основи програмування : Побудова типових алгоритмів та програм

Електронна бібліотека. Художня та наукова література.

 

 

 

Основи програмування:Побудова типових алгоритмів та програм

 

загрузка...

Основні форми запису алгоритмів

Виділяють дві основні форми запису алгоритмів, що лежать в основі процедурних програм: словесний опис і блок-схема.
Словесний опис може в принципі бути будь-яким, але найбільш типовою є покрокова форма словесного опису.
Наприклад:
Крок 1. Ввести a.
Крок 2. Ввести b.
Крок 3. Обчислити S = a+b.
Крок 4. Вивести S на екран.
Блок-схема являє собою графічне подання алгоритму. Для блок-схем існує досить вживана нотація. Згідно з нею, послідовність виконання інструкцій зображається стрілками. Окремі операції позначаються прямокутниками.

Умови, які задають розгалудження типу \"Якщо справедлива умова С, виконати операцію A, інакше виконати операцію B\" - ромбами
Замість позначок \"Так\" і \"Ні\" на стрілках часто використовують позначки відповідно \"+\" і \"-\".
Операції введення-виведення інколи позначаються паралелограмами; початок і кінець програми - овалами.

Деякі приклади алгоритмів

Програми і алгоритми, які лежать в їх основі, конструюються на основі більш простих конструкцій. Цих базових конструкцій порівняно небагато. Алгоритм для вирішення однієї і тієї ж задачі можна записати по-різному; від належного вибору базових конструкцій істотно залежить ефективність, читабельність і модифікованість програми.
Наведемо простий приклад.
Розглянемо задачу виpiшення квадpатного piвняння
x2 + bx + c = 0
пpи piзних значеннях b i c. Для простоти ми вважаємо, що коефіцієнт при x2 дорівнює 1, це ніяк не впливає на подальше викладення.
Пеpш за все, очевидно, тpеба знати метод виpiшення задачi. Вiн задається вiдомою фоpмулою:
x1,2 =(-b±√d)/2*a),
де d = b2 -4c.
На наступному етапі фоpмули слiд записати у виглядi алгоpитму, тобто послiдовностi чiтких та недвозначних iнстpукцiй. У нашому випадку такий алгоpитм може бути записаний у виглядi:
Кpок 1. Ввести значення b,c.
Кpок 2. Обчислити d = b2 -4c.
Кpок 3. Якщо d<0, пеpейти на кpок 8.
Кpок 4. Обчислити x1=(-b+√d)/2*a)
Кpок 5. Обчислити х2=(-b-√d)/2*a)
Кpок 6. Вивести на дpук х1 та х2.
Кpок 7. Пеpейти на кpок 9.
Кpок 8. Вивести на дpук фpазу \"РIВHЯHHЯ КОРЕHIВ HЕ МАЄ\".
Кpок 9. Закiнчити виконання пpогpами.
Вказаний алгоpитм повинен виконуватись послiдовно, вiд пеpшого до останнього кpоку. Поpядок виконання кpокiв має велике значення. Якщо спpобувати спочатку виконати 4-й кpок, а потiм пеpший, алгоpитм пpацювати не буде.
В програмі реалізована типова схема IPO(Input - Processing - Output; введення - обробка - виведення): спочатку вводятся данi (b,c), потiм виконуються обчислення, i, наpештi, виводяться pезультати (x1,x2) в одному випадку i повiдомлення пpо вiдсутнiсть коpенiв в iншому).
Вказівки типу \"перейти на крок такий-то\" змінюють послідовність виконання кроків: так, в нашому випадку після 7-го кроку виконується 9-й. Сама по собі можливість такої зміни послідовності виконання програмних інструкцій має дуже велике значення. Але явне виписування таких вказівок носить незграбний характер і затуманює простий алгоритм. При великій кількості таких інструкцій, особливо якщо вони несистематизовані, програма стає абсолютно нечитабельною. На щастя, існують алгоритмічні конструкції, які дозволяють уникати подібних інструкцій у мовах високого рівня. Ці конструкції дозволяють записати цей самий алгоритм у значно більш зрозумілому вигляді:
Крок 1. Ввести b та c;
Крок 2. Обчислити d=b2-4c;
Крок 3. Якщо d<0, надрукувати : \" Рівняння коренів не має\", інакше робити:
обчислити х1=(-b+√d)/2*a);
обчислити x2=(-b-√d)/2*a);
Вивести на друк x1 та x2;
Крок 4. Кінець.

При такому записі нумерація кроків стає зайвою, і її можна опустити.
Відповідна програма, записана мовою Паскаль, буде мати вигляд:
Program ROOTS;
var D: real;
B,C : real;
X1,X2 : real;
begin
Read (B,C);
D:=B*B - 4* C;
if (D<0) then write (\'Рівняння коренів не має\')
else begin
X1:=(-B+SQRT(D))/2;
X2:=(-B-SQRT(D))/2;
write (X1,X2);
end;
end.

У цьому простому випадку програма являє собою майже дослівний переклад алгоритму на англійську мову. На жаль, так буває далеко не завжди.

Основні алгоритмічні конструкції

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

1. Складений оператор (блок). Являє собою послідовність операторів. На блок-схемах ця послідовність або пишеться в одному прямокутнику, або малюється у вигляді декількох прямокутників, що йдуть один за одним.
2. Умовний оператор. Являє собою конструкцію \"якщо справедлива умова С, то виконується дія A, інакше - дія В\".
В Паскалі умовний оператор має такий синтаксис:
if умова then оператор1 else оператор2;
Можна використовувати і скорочену (без else) форму цього оператора:
if умова then оператор1;
# Зверніть увагу на те, що в Паскалі (на відміну від Сі) крапка з комою перед else ніколи не повинна ставитися і сприймається компілятором як синтаксична помилка.Цикли. Циклом називається повторення деяких дій. У найтиповішому випадку цикл виконується, поки справедлива певна умова. Цю умову можна первіряти як на початку циклу, як і в кінці. Відповідно до цього можна виділяти різні типи циклів.
Цикл з передумовою виконується, поки умова залишається істинною. Перевірка її істинності виконується перед кожним проходом циклу; якщо умова не є істинною з самого початку, цикл не виконується жодного разу.
В Паскалі цикл з передумовою записується у вигляді:
while умова do оператор;
Цикл з постумовою передбачає перевірку істинності умови в кінці циклу. Такий цикл завжди виконується хоча б один раз.
Паскалівський цикл з постумовою записується у вигляді
repeatоператор 1;...оператор n;until умова;
Зверніть увагу: паскалівський цикл repeat-until виконується, доки умова залишається хибною; коли вона стає істинною, відбувається вихід з циклу.
Спеціальним (і дуже важливим) типом циклу є цикл, який повторюється задану кількість разів. Класичним прикладом такого циклу є паскалівський цикл for, найбільш типовою формою якого є наступна:
for i:=m to n do оператор;
Тут m ≤ n, якщо ж m > n, використовується інша форма цього циклу:
for i:=m downto n do оператор;
Цикл з заданою кількістю повторень
# Змінна i, яка називається лічильником циклу, перед його початком встановлюється в m і автоматично збільшується на 1 при кожному проході, поки не досягне значення n. Будь-які спроби вручну змінювати значення лічильника всередині циклу for неприпустимі. Хоч деякі компілятори і не звертають на це уваги, подібна операція часто призводить до важкоконтрольованих наслідків і вважається грубою семантичною помилкою. Легко бачити, що блок-схему можна реалізувати і за допомогою циклу з передумовою, але у такому випадку програміст повинен сам подбати про встановлення і зміну лічильника циклу, а також про перевірку умови виходу з циклу.
# Оператор переходу. Задає перехід на будь-яке інше місце в програмі; був розглянутий у цьому параграфі вище. В Паскалі переходи реалізуються за допомогою оператора
goto мітка;

Попереднє питання | Змiст |

 

Увага!

1. Всі книги та матеріали належать їх авторам.
2. Призначені для приватного перегляду.
3.Будь-яке комерційне використовування їх категорично заборонене.

 

 


Content-Pro | 2006-2015

Контакти:

317197170