Циклічні алгоритми

Застосування циклічних алгоритмів для створення циклів за допомогою умовного або безумовного переходів. Цикли з параметром та умовою (приклади). Використання операторів мови програмування Паскаль для організації повторюваних послідовностей дій (циклів).

Рубрика Программирование, компьютеры и кибернетика
Вид контрольная работа
Язык украинский
Дата добавления 02.06.2012
Размер файла 435,9 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Завдання 1. Циклічні алгоритми

Циклічні алгоритми дозволяють за допомогою умовного або безумовного переходу неодноразово виконувати ряд дій, створюючи цикл. При зміні вхідних даних циклічний алгоритм дозволяє багаторазово відтворювати дії, що входять у цикл.

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

Турбо Паскаль дозволяє використати три різних оператори для організації повторюваних послідовностей дій, які називають циклами.

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

Оператор циклу For організує виконання одного оператора заздалегідь певне число раз. Його ще називають цикл із лічильником. Існує дві форми оператора:

FOR <параметр>: = <nz> TO <kz> DO <оператор>;

FOR <параметр>: = <nz> DOWNTO <kz> DO <оператор>;

Тут параметр циклу (лічильник) являє собою змінну порядкового (ординального) типу; <nz> й <kz> - вираження, що визначають початкове й кінцеве значення лічильника; <оператор> - один (можливо складовій) оператор, що називають тілом циклу, повторюваний певне число раз.

На першому кроці циклу параметр приймає значення nz. У цей же момент відбувається обчислення kz - значення параметра на останньому кроці циклу. Після кожного виконання тіла циклу, якщо параметр циклу не дорівнює kz, відбувається зміна параметра на наступне більше або менше значення залежно від форми оператора for, тобто неявно відбувається виконання одного із двох операторів:

<параметр>: = Succ (<параметр>);

<параметр>: = Pred (<параметр>);

У випадку nz > kz у першій формі оператора або nz < kz у другій його формі помилки не відбувається, але цикл не виконується жодного разу.

Після завершення роботи циклу значення параметра залишається рівним kz.

РЕКОМЕНДАЦІЇ: Використати цикл for при заздалегідь відомій кількості повторень. Не змінювати параметр у тілі циклу.

При використанні кратних (вкладених) циклів застосовувати різні змінні як параметри.

Визначати до циклу значення всіх використовуваних у ньому змінних. Не ставити крапку з коми після do.

ПРИКЛАД: Уводяться 10 чисел, порахувати серед них кількість позитивних.

program cycle_for1;

var i,kn: byte; x: real;

begin

kn: =0;

for i: =1 to 10 do

begin

writeln ('Уведіть ', i,' число: ');

readln (x);

if x>0 then kn: =kn+1 {збільшуємо кількість на 1}

end;

writeln ('Ви ввели ',kn,' позитивних чисел. ');

readln

end.

ПРИКЛАД: Надрукувати букви від 'Z' до 'A'.

program cycle_for2;

var c: char;

begin

for c: ='Z' downto 'A' do write (c);

readln

end

ПРИКЛАД: Обчислити N-і число Фиббоначчи. Числа Фиббоначчи будуються в такий спосіб: F (0) =F (1) =1; F (i+1) =F (i) +F (i-1); для i>=1. Це приклад обчислень по рекуррентным формулах.

program Fib;

var a,b,c: word; i,n: byte;

begin

write ('уведіть номер числа Фиббоначчи ');

readln (N);

a: =1; {a=F (0), a відповідає F (i-2) }

b: =1; {b=F (1), b відповідає F (i-1) }

for i: =2 to N do

begin

c: =a+b; {c відповідає F (i) }

a: =b; b: =c; {у якості a й b береться наступна пара чисел}

end;

writeln (N,'-е число Фиббоначчи =',b); {для N>=2 b=c}

readln

end.

Цикли з умовою

Якщо заздалегідь невідоме число повторень циклу, то використаються цикли з умовою. У Паскалі є два типи таких циклів. Цикли While називають циклами з перед-умовою. Вони мають вигляд

WHILE <логич. вираження> DO <оператор>;

Цикл While організує виконання одного (можливо складеного) оператора поки істинно логічне вираження, що коштує в заголовку циклу. Оскільки значення логічного вираження перевіряється на початку кожної ітерації, то тіло циклу може не виконатися жодного разу. Таким чином, у цьому циклі логічне вираження - це умова продовження роботи в циклі.

Інший варіант циклів з умовою - це цикли Repeat. Їх називають циклами з пост-умовою. Вони мають вигляд

REPEAT

<оператор 1>. <оператор N>

UNTIL <логич. вираження>

Оператор Repeat організує повторюване виконання декількох операторів доти поки не стане щирим умова, що коштує в Until-частині. Тіло циклу обов'язково виконується хоча б один раз. Таким чином, у цьому циклі логічне вираження - це умова виходу із циклу.

При створенні циклічних алгоритмів Турбо Паскаль дозволяє використати процедури Continue й Break. Процедура Continue достроково завершує черговий крок циклу, передає керування на заголовок. Процедура Break реалізує негайний вихід із циклу.

РЕКОМЕНДАЦІЇ: Для того, щоб уникнути зациклення програми необхідно забезпечити зміну на кожному кроці циклу значення хоча б однієї змінної, вхідної в умову циклу. Після виходу із циклу зі складною умовою (з використанням операцій and, or, xor) як правило необхідне перевірка того, по якій умові цикл завершений.

ПРИКЛАД: Пари ненегативних речовинних чисел уводяться із клавіатури. Порахувати добуток для кожної пари й суму всіх чисел.

program cycle_while;

var x,y,sum: real; otv: char;

begin

sum: =0;

otv='Д';

while (otv='Д') or (otv='д') do

begin

write ('Уведіть числа x,y > 0 ');

readln (x,y);

writeln ('Їхній добуток = ',x*y: 8: 3);

sum: =sum+x+y;

write ('Завершити програму (Д/Н)? ');

readln (otv);

end;

writeln ('Загальна сума = ',sum: 8: 3);

readln

end.

ПРИКЛАД: У тій же задачі можна використати інший цикл із умовою:

program cycle_repeat;

var x,y,sum: real; otv: char;

begin

sum: =0;

repeat

write ('Уведіть числа x,y > 0 ');

readln (x,y);

writeln ('Їхній добуток = ',x*y: 8: 3);

sum: =sum+x+y;

write ('Завершити програму (Д/Н)? ');

readln (otv);

until (otv='Д') or (otv='д');

writeln ('Загальна сума = ',sum: 8: 3);

readln

end.

ПРИКЛАД: Знаходження найбільшого загального дільника двох цілих чисел за допомогою Алгоритму Эвклида.

program Evklid;

var a,b,c: integer;

begin

write ('уведіть два цілих числа: ');

readln (a,b);

while b<>0 do

begin

c: =a mod b;

a: =b;

b: =c;

end;

writeln ('найбільший загальний дільник = ',a);

readln

end.

Завдання 2

Дано координати трьох вершин трикутника А (0; 0), В (4;

3) та С (-4;

5).

Обчислити висоту r та медіану mc.

Program trikytnik;

uses CRT;

var xa,xb,xc,ya,yb,yc,a,b,c,m,xm,ym,p,r,s: real;

begin

clrscr;

writeln ('Програма обчислення висоти до сторони a трикутника');

writeln ('та медiани до сторони b трикутника'); writeln;

xa: =0; ya: =0; xb: =4; yb: =3; xc: =-4; yc: =5;

a: =sqrt (sqr (xb-xc) +sqr (yb-yc));

b: =sqrt (sqr (xa-xc) +sqr (ya-yc));

c: =sqrt (sqr (xb-xa) +sqr (yb-ya));

p: = (a+b+c) /2; {полупериметр}

s: =sqrt (p* (p-a) * (p-b) * (p-c)); {площа}

r: =s/p;

xm: = (xb+xc) /2; {центр сторони BС}

ym: = (yb+yc) /2;

m: =sqrt (sqr (xm-xa) +sqr (ym-ya));

writeln ('Медiана до сторон a дорiвнює m =',m: 5: 2);

writeln ('Радиус вписаного кола',r: 5: 2);

writeln ('Для завершення натиснить довiльну клавiшу');

ReadKey;

end.

Результат виконання програми.

Завдання 3

Напишіть програму обчислення оптимальної ваги для користувача порівняйте її. формулою зріст - 100.

uses CRT;

var x,y,u: real;

begin

writeln ('Введить масу, рост');

readln (x,y);

IF (x>y-100) then

begin

writeln ('Вы толстяк')

end;

else

begin

writeln ('Вы худой')

end;

writeln;

writeln ('Для завершення натиснить довiльну клавiшу');

ReadKey;

end.

Результат виконання програми.

Введить масу, рост

180 78

Vi hydoy

Для завершення натиснить довiльну клавiшу

Завдання 4

Дані два дійсні числа (x, y) - координати точки на площині. Значення функції залежить від того, належить точка (x, y) до області F чи ні.

uses CRT;

var x,y,u: real;

begin

clrscr;

writeln ('Введить X, Y');

readln (x,y);

IF (x>=-2) and (x<=2) THEN

begin

writeln ('Точка належить областi F');

u: =x*x-x;

end

else

begin

writeln ('Точка не належить областi F');

u: =x*y-3;

end;

writeln ('u =', u: 5: 2); writeln;

writeln ('Для завершення натиснить довiльну клавiшу');

ReadKey;

end.

Результат виконання програми.

1) Введіть X, Y

0 1.5

Точка належить областi F

u = 0.00

Для завершення натиснить довiльну клавiшу

2) Введіть X, Y

0 0.5

Точка не належить областi F

u = 0.00

Для завершення натиснить довiльну клавiшу

3) Введіть X, Y

1.5 0.5

Точка належить областi F

u = 0.00

Для завершення натиснить довiльну клавiшу

4) Введіть X, Y

1.5 2

Точка не належить областi F

u = 1.50

Завдання 5

Вести номер маршруту автобуса. Вивести кількість його зупинок на маршруті.

uses CRT;

var

K,S1,S2: string;

f: integer;

begin

clrscr;

S1: ='Номер маршруту - ';

S2: =', К-сть Зупинок - ';

writeln ('ведіть від 1 - 5 номер маршруту ');

readln (k);

f: =k [1];

Case f of

'1': writeln (S1,'1',S2, '10'); {s1 - Станція, 10 кількість зупинок}

'2': writeln (S1,'2',S2, '12');

'3': writeln (S1,'3',S2, '13');

'4': writeln (S1,'4',S2,'19');

'5': writeln (S1,'5',S2,'3');

end;

writeln ('Для завершення натиснить довiльну клавiшу');

ReadKey;

end.

Результат виконання програми.

ведіть від 1 - 5 номер маршруту

2

12

Для завершення натиснить довiльну клавiшу

Завдання 6

Написати програму для побудови таблиці відповідності між мірами. Початкове значення міри, крок зміни цього значення та кількість рядків у таблиці (10-15) задати самостійно у режимі діалогу. Оформити таблицю якнайкраще, використовуючи формати виведення.

1 пек = 8.81 л = 0.07929 сака

program saka;

uses CRT;

var

x0,dx,x,y: real;

m1,m2,n, i: integer;

sx: string;

begin

clrscr;

writeln ('Оберить мiру (введить цiфру), яку потрiбно перекласти у iншу');

write ('1 - пек, 2 - литр, 3 - сака ');

readln (m1);

writeln ('Оберить мiру (введить цiфру), в яку потрiбно перекласти');

write ('1 - пек, 2 - литр, 3 - сака ');

readln (m2);

write ('Введить початкове значення мiри ');

readln (x0);

write ('Введить крок змiни ');

readln (dx);

writeln ('Введить кiлькiсть рядкiв');

readln (n);

case m1 of

1: sx: ='пек';

2: sx: ='литр';

3: sx: ='сака';

end;

write (sx);

case m2 of

1: sx: ='пек';

2: sx: ='литр';

3: sx: ='сака';

end;

gotoxy (10,wherey);

writeln (sx);

x: =x0;

for i: =1 to 15 do

begin

Case m1 of

1:

Case m2 of

2: y: =x/8.81;

3: y: =x/0.07929;

end;

2:

Case m2 of

1: y: =x*8.81;

3: y: =x*8.81/0.07929;

end;

3:

Case m2 of

1: y: =x*0.07929;

2: y: =x*0.07929/8.81;

end;

end;

writeln (x: 5: 2,y: 10: 2);

x: =x+dx;

end;

writeln ('Для завершення натиснить довiльну клавiшу');

ReadKey;

end.

Завдання 7

Написати програму, що дозволяє утворити і вивести на екран масив W з елементами wk = F (k), k = . Скільки є елементів з мінімальним значенням серед додатних?

Текст програми:

uses CRT;

var

k,n: integer;

min: real;

w: array [1.12] of real;

begin

clrscr;

randomize;

writeln ('Масив w [k]: ');

for k: =1 to 12 do

begin

w [k]: =70* (2*k-5) *cos (2*k) / ( (k+1.5) * (k+2)) +6.8*abs (k);

write (w [k]: 5: 2,' ');

end;

writeln;

for k: =1 to 12 do

begin

if (w [k] >0) then

begin

min: =w [k];

break;

end;

end;

for k: =1 to 12 do

begin

if (w [k] >0) then

if (w [k] <min) then min: =w [k];

end;

for k: =1 to 12 do

if (w [k] =min) then n: =n+1;

writeln ('Cеред додатних елементiв мiнiмальне значення (', min: 5: 2,') ');

writeln ('мають ', n);

ReadKey;

end.

Завдання 8

Написати програму, що дозволяє утворити масив з елементами akn = random (10i+50), i = 12, k,n = .

Вивести його на екран у вигляді таблиці (матриці).

Обчислити добуток перших 2 рядів та визначити скільки серед цих елементів нульових.

Текст програми:

uses CRT;

var

k,n,d,e: integer;

a: array [1.4,1.4] of integer;

begin

clrscr;

randomize;

writeln ('Згенерований масив: ');

for k: =1 to 4 do

begin

for n: =1 to 4 do

a [k,n]: =random (10*4+50);

end;

for k: =1 to 4 do

begin

for n: =1 to 4 do

write (a [k,n]: 2,' ');

writeln;

end;

writeln;

d: =1;

for k: =1 to 4 do

begin

for n: =1 to 4 do

if (a [k,n] =0) then

begin

e: =e+1;

end;

begin

for n: =1 to 2 do

begin

d: =d*a [k,n];

end;

end;

writeln ('Добуток перших 2 рядів ',d);

writeln ('кiлькiсть нульових елементiв складає ',e);

ReadKey;

end.

Результат виконання програми.

Згенерований масив:

62 47 57 14

68 47 0 20

29 1 59 69

61 2 64 41

Добуток додатних елементiв 2 ряду складає 24576

кiлькiсть нульових елементiв складає 0

Завдання 9

Написати програму розрахунку оплати за перевезення вантажів. Нехай оплата за перевезення залежить від типу автомобіля (А, В, С) та відстані перевезення (х) нараховуються за формулою, наведеною у таблиці.

Для робіт типу А відрахування складають 10%, для В - 15%, для С - 20%. Вивести нараховану суму, відрахування і суму до видачі. Обчислення за кожним типом оформити у вигляді підпрограм.

Текст програми:

uses CRT;

var

x0,y,v,y0: real;

t: string;

s: char;

function A (x: real): real;

begin

A: =78* ( (2*x*x+5) +cos (3,3*x)) / ( (x+4) * (2x+1));

end;

function B (x: real): real;

begin

B: =8,4+59* ( (x+2,4) *ln|x|) */ ( (2x+3) * (x+8)); end;

function C (x: real): real;

begin

C: =15,2+68* (tg (3*x) +2* (x+4)) / ( (x+9) * (2*x+0,8));

end;

begin

clrscr;

randomize;

writeln ('Введить X: ');

readln (x0);

writeln ('Введить тип автомобiля (А, В, С) ');

readln (t);

s: =t [1];

case s of

'A','a': begin y0: =A (x0); y: =A (x0) *0.1; v: =A (x0) - y; end;

'B','b': begin y0: =B (x0); y: =B (x0) *0.15; v: =B (x0) - y; end;

'C','c': begin y0: =C (x0); y: =C (x0) *0.2; v: =C (x0) - y; end;

end;

writeln;

writeln ('Cума = ', y0: 5: 2, ' вiдрахування = ',y: 5: 2,' сума до видачi = ', v: 5: 2);

ReadKey;

end.

Результат виконання програми.

1 v

циклічний алгоритм оператор параметр

2 v

3 v

Література

1. Фаронов В.В. Turbo Pascal 7.0 Начальный курс. - СПб: BHV 1997 г, 616 стр.

2. Фаронов В.В. Turbo Pascal 7. Практика программирования - М: "Нолидж", 1997 г, 416 стр.

3. Рапаков Г., Ржеуцкая С. Turbo Pascal для студентов и школьников. - СПб: "БХВ-СПб", 2002 г, 352 стр.

4. Культин Н. Программирование в Turbo Pascal 7.0 и Delphi. / 2-е изд., перераб. и доп. - ВС99. - 416 с.

5. Сурков Д.А. и др. Программирование в среде Borland Pascal для Windows: Справ. пос. - МВ96. - 432 с.

Размещено на Allbest.ru


Подобные документы

  • Дослідження основних арифметичних команд над цілими двійковими числами. Особливості безумовно-умовних переходів мови Асемблер. Відмінні риси команд умовного переходу, організації циклів, порівняння. Характеристика ознак команди безумовного переходу.

    реферат [18,9 K], добавлен 26.04.2010

  • Методика та порядок програмування алгоритмів циклічної структури із заданим числом повторень за допомогою мови програмування VAB. Алгоритм роботи з одновимірними масивами. Програмування алгоритмів із структурою вкладених циклів, обробка матриць.

    курсовая работа [27,7 K], добавлен 03.04.2009

  • Побудова блок-схем алгоритмів програм. Створення блок схем алгоритмів за допомогою FCEditor. Експорт блок-схеми в графічний файл. Огляд програмних та апаратних засобів. Мови програмування високого рівня. Цикли та умовний оператор IF з лічильником.

    дипломная работа [1,4 M], добавлен 15.12.2013

  • Прості та умовні оператори мови С++. Робота з двовимірними масивами. Пошук та сортування даних. Робота з файлами та з динамічними структурами даних. Опис мови програмування Delphi. Складення програми до розроблених алгоритмів. Організація циклів.

    отчет по практике [4,3 M], добавлен 28.08.2014

  • Галузі застосування та принцип роботи мови програмування "Пролог". Керування процесом пошуку рішень, типи даних та використання списків. Рекурсивні процедури та цикли за допомогою пошуку з поверненням. Виконання арифметичних та логічних операцій.

    курс лекций [99,7 K], добавлен 06.07.2011

  • Огляд переваг та недоліків мови Пролог, історія її створення. Числення предикатів як математична основа її функціонування. Порівняльна характеристика середовищ програмування Prolog. Алгоритми розв’язування математичних задач за допомогою цієї мови.

    курсовая работа [504,5 K], добавлен 23.12.2014

  • Мoвa прoгрaмувaння як систeма пoзначень, що служить для точного опису програм або алгоритмів для ЕOM. Вимоги до мов програмування, класифікація за їх особливостям. Загальна характеристика найбільш поширених мов програмування: Сі, Паскаль, Delphi, Бейсік.

    реферат [24,4 K], добавлен 10.11.2012

  • Визначення та способи представлення графів. Основні алгоритми на графах. Побудова мінімального остового дерева. Алгоритми Прима та Дейкстри. Модель Флойда-Уоршалла. Огляд можливостей мови програмування. Опис функцій програмної моделі, інтерфейс програми.

    дипломная работа [563,7 K], добавлен 03.08.2014

  • Правила оголошення та функціональне призначення простих і структурних операторів мови Паскаль. Принципи використання символьних масивів, процедур і функцій для обробки рядків. Особливості виконання операцій поєднання та порівняння над рядковими даними.

    реферат [45,8 K], добавлен 13.11.2010

  • Загальні відомості про мову програмування, історія створення та використовування. Програма мовою Паскаль складається з лексем і символів – розділювачів. Робота з масивами, створення алгортимів. Складання програм з використанням процедур та функцій.

    реферат [18,3 K], добавлен 22.10.2010

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.