Практична
робота 61.
Нелінійні алгоритми мовою Pascal
Завдання 1. Старовинний годинник з дванадцятигодинним циферблатом б’є в кінці останньої
хвилини кожної години. Бій триває менше однієї хвилини. Кількість ударів відповідає
показам годинникової стрілки (1 удар – о першій ночі і о першій дня, по 2
удари – о другій години ночі та о другій дня і так далі, опівночі і опівдні він
б’є, відповідно, по 12 разів. Дано проміжок часу (відомо, що пройшло строго
менше 24 годин). Напишіть програму, що визначає, скільки ударів зробив годинник за цей
час.
Технічні умови: Вхідні дані: ви вводите з клавіатури у першому рядку початковий момент
часу,
в другому рядку — кінцевий. Моменти часу задаються двома цілими числами,
що
розділяються пропуском.
Перше
число задає години (від 0 до 23, друге – хвилини (від 1 до 59).
Вихідні
дані: ви виводите на екран одне число — кількість ударів,
які
зробив годинник за цей відрізок часу.
Алгоритм мовою програмування
Pascal
Program Godynnyk; //
Називаємо програму і оголошуємо змінні
var
g1,h1,g2,h2,i,s:integer;
// g1,g2 -початкова і кінцева години;i- циклічна
змінна;
//h1,h2 – початкова і кінцева хвилини;
s-сума (кількість ударів)
begin
s:=0;
writeln('Bведіть початкову годину і хвилину через пробіл');
g1:=1+random(12);
h1:=random(59);writeln(g1,'год ', h1, 'хв
'); {readln (g1,h1);} // початкові дані
writeln('Bведіть кінцеву годину і хвилину через пробіл');
g2:=12+random(12);
h2:=random(59); writeln(g2,'год ', h2, 'хв
'); {readln (g2,h2);}
if g2>g1 then // коли кінцевий момент часу більший за початковий
begin
if g2>12 then // коли кінцевий час більший за 12
begin // спрацьовує
цей фрагмент програми
for i:=g1+1 to 12
do s:=s+i; //циклічна
змінна змінюється від наступної за початковою годиною
for i:=1 to g2-12
do s:=s+i; // до 12 години.
Враховуємо ще один оберт малої стрілки.
end else
begin // коли кінцевий час менший за 12
for i:=g1+1 to g2
do s:=s+i; // працює цикл для обчислення площі
end; end;
if g2<g1 then
// коли
кінцевий момент часу менший за початковий
begin
for i:=g1+1 to 12
do s:=s+i; //рахуємо
удари годинника від початкової до 12 години
for i:=1 to 12
do s:=s+i; //рахуємо
удари годинника від 1 до 12 год
for i:=1 to g2
do s:=s+i; //знову удари годинника від 1 до кінцевої години
end;
if g2=g1 then // коли кінцевий момент часу
дорівнює початковому
begin
s:=0; // якщо години
співпадають то ударів не буде
end;
writeln
('Відповідь: годинник зробив ', s, ' ударів');
end.
Завдання
2. Два прожектори утворюють на стіні дві плями квадратної форми, одну
– блакитного, а другу – жовтого кольору. Визначити площу плями зеленого кольору,
яка утворилася внаслідок накладання двох плям – блакитної та жовтої.
Вхідні дані: ви вводите з клавіатури у першому
рядку координати лівої нижньої вершини кожного квадрата (натуральні числа
x1,y1, х2, у2 <1000, розділені пропуском), у другому рядку – довжини сторін квадратів
(натуральні числа а1, а2<100, розділені пропуском).
Вихідні дані: ви виводите на екран
одне число – площу.
Алгоритм мовою програмування
Pascal
Program Zeleny_kvadrat;
var a,b,x1,y1,x2,y2,a1,a2,i,j:
integer; //оголошення
змінних
label start ; // оголошення
мітки початку програми
begin
a:=0;
b:=0; // початкові
значення ширини і висоти зеленої плями
writeln
('Введіть координати початкових вершин
двох квадратів через пробіл');
x1:=random(1000);
y1:=random(1000); x2:=random(1000); y2:=random(1000);
writeln('
x1=',x1,' y1=',y1,' x2=',x2,' y2=', y2); {readln(x1,y1,x2,y2);}
writeln
('Введіть розміри двох кольорових
квадратних плям через пробі{readln(a1,a2);}л');
a1:=1+random(100);
a2:=2+random(100); writeln('a1=', a1, ' a2=',a2);
for i:=x1 to x1+a1-1
do begin // змінюємо і від початкової
координати до ширини першої плями
for j:=x2 to x2+a2-1
do // змінюємо j
від початку до ширини другої плями
if i=j then a:=a+1; // якщо точки співпадають –
збільшуємо ширину зеленої плями на 1
end;
for i:=y1 to y1+a1-1
do begin //аналогічно вчиняємо з висотою
зеленої плями
for j:=y2 to y2+a2-1
do
if i=j then b:=b+1; //в разі
співпадання висота збільшується на 1
end;
writeln
(' площа зеленої плями ',a*b);
end.
Завдання для самостійного опрацювання
Немає коментарів:
Дописати коментар