Циклічні алгоритми
Застосування циклічних алгоритмів для створення циклів за допомогою умовного або безумовного переходів. Цикли з параметром та умовою (приклади). Використання операторів мови програмування Паскаль для організації повторюваних послідовностей дій (циклів).
Рубрика | Программирование, компьютеры и кибернетика |
Вид | контрольная работа |
Язык | украинский |
Дата добавления | 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