Министерство образования и науки РФ
СИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНОЛОГИЧЕСКИЙ УНИВЕРСИТЕТ
Лесосибирский филиал
Кафедра: Информационных и технических систем
Алгоритмы линейной, разветвленной и циклической структуры
Пояснительная записка
(ИТС. 230100.012 ПЗ)
Руководитель:
________П.А. Егармин
(подпись)
____________________
(оценка, дата)
Разработал:
Студент группы 61-1
__________ Р.О. Сухих
(подпись)
____________________
(дата)
Содержание
Вариант №8
ПРОГРАММИРОВАНИЕ АЛГОРИТМОВ ЛИНЕЙНОЙ СТРУКТУРЫ
Цель работы: Изучение базовой алгоритмической конструкции «линейное следование». Изучение структуры Pascal-программы, синтаксиса и семантики блоков Pascal-программы. Изучение процедур ввода-вывода WRITELN, WRITE, READ, READLN, оператора присваивания.
Задание 1.
Постановка задачи:
Даны числа x, y, z. Разработать программу вычисления значений переменных a, b, если
Математическая формулировка задачи:
В данных формулах трудность представляет только нахождение значения числа в сложной степени. Эта задача решается представлением степени через натуральный логарифм:
Таблица 1 - Таблица внешних спецификаций:
|
Имя переменной |
Назначение переменной |
Тип переменной |
Единицы измерения |
Входные данные |
x y z |
число число число |
real real real |
- - - |
Выходные данные |
a b |
число число |
real
|
- - |
Расчет контрольных примеров :
При x=4, y=8, z=1: a= =0, b= =0,9
При x=10, y=8, z=0: a= =12.5, b= =0
Б лок-схема:
Рисунок 1 – Блок-схема к заданию №1
Программная реализация:
Program laba2;
uses
crt;
var
x,y,z,a,b: real;
begin
clrscr;
write ('x= ');
readln (x);
write ('y= ');
readln (y);
write ('z= ');
readln (z);
a:=ln(x-exp(1/3*ln(y)))*(x-y/2);
b:=sqr(sin(y-x))*(sin(z)/cos(z));
writeln ('Ответ: ');
writeln ('a=', a:10:6);
writeln ('b=', b:10:6);
readln;
end.
Протокол выполнения программы:
в процессе диалога с пользователем вводим x=4, y=8, z=1;
вычисление a:=ln(x-exp(1/3*ln(y)))*(x-y/2);
вычисление b:=sqr(sin(y-x))*(sin(z)/cos(z));
печать ‘a= 0;
печать ‘b= 0.892005;
в процессе диалога с пользователем вводим x=10, y=8, z=0;
вычисление a:=ln(x-exp(1/3*ln(y)))*(x-y/2);
вычисление b:=sqr(sin(y-x))*(sin(z)/cos(z));
печать ‘a=12.476649;
печать ‘b=0;
Задание 2.
Постановка задачи:
Разработать программу вычисления радианной меры угла U, если мы вводим a-градусов, b-минут, c-секунд. По данной формуле:
Таблица 2 - Таблица внешних спецификаций:
|
Имя переменной |
Назначение переменной |
Тип переменной |
Единицы измерения |
Входные данные |
a b с |
число число число |
integer integer integer |
градусы минуты секунды |
Выходные данные |
U |
число |
real
|
радианы |
Расчет контрольных примеров :
При a=35, b=26, c=47, =0.6
При a=45, b=30, c=15 , =0.8
Блок-схема:
Рисунок 2 – Блок-схема к заданию №2
Программная реализация:
Program laba2ugl;
uses
crt;
var
a,b,c: integer;
U: real;
begin
clrscr;
write ('Введите а градусов ');
readln (a);
write ('Введите b минут ');
readln (b);
write ('Введите с секунд ');
readln (c);
U:=a*PI/180+b*PI/(180*60)+c*PI/(180*60*60);
writeln ('Ответ: ');
writeln ('Угол U=',U:6:6, ' радиан');
readln;
end.
Протокол выполнения программы:
в процессе диалога с пользователем вводим a=35, b=26, c=47;
вычисление ;
печать ‘U= 0.618656;
в процессе диалога с пользователем вводим x=45, y=30, z=15;
вычисление ;
печать ‘U=0.794198;
Задание 3.
Постановка задачи:
Разработать программу вычисления сторон треугольника a, b, c, если нам даны 2 угла B и C и высота h.
Математическая формулировка задачи:
В нашем примере q – это угол B, е – угол C. Первую сторону b мы находим с помощью определения синуса угла в прямоугольном треугольнике ( ), аналогично находим сторону c ( ). Затем вычисляем угол A, который в нашей задаче есть t, по основному свойству углов треугольника, что их сумма равна 180°(A=180°-B-C). Затем вычисляем последнюю сторону a по теореме косинуса ( );
Таблица 3 - Таблица внешних спецификаций:
|
Имя переменной |
Назначение переменной |
Тип переменной |
Единицы измерения |
Входные данные |
q e h p |
угол B угол C высота угол A |
real real real real |
градусы градусы сантиметры градусы |
Выходные данные |
a b c |
сторона сторона сторона |
real real real |
сантиметры сантиметры сантиметры |
Расчет контрольных примеров:
При q=60, e=60, h=5.2
=6
=6
=6
При q=60, e=60, h=3,
=3.5
=6
=6.9
Блок-схема:
Рисунок 3 – Блок-схема к заданию №3
Программная реализация:
Program laba2treug;
uses
crt;
var
a,b,t,c,h,q,e: real;
begin
clrscr;
write ('Введите угол q ');
readln (q);
write ('Введите угол e ');
readln (e);
write ('Введите высоту, проведённую к стороне а. h= ');
readln (h);
t:=180-q-e;
q:=q*(PI/180);
e:=e*(PI/180);
t:=t*(PI/180);
b:=abs(h/sin(e));
c:=abs(h/sin(q));
a:=abs(sqrt((sqr(b)+sqr(c)-2*b*c*cos(t))));
writeln ('Ответ: ');
writeln ('Сторона a=', a:5:3);
writeln ('Сторона b=', b:5:3);
writeln ('Сторона c=', c:5:3);
readln;
end.
Протокол выполнения программы:
в процессе диалога с пользователем вводим q=60, e=60, h=5.2;
вычисление ;
вычисление ;
вычисление ;
печать ‘a= 6.007’;
печать ‘b= 6.007’;
печать ‘c= 6.007’;
в процессе диалога с пользователем вводим q=30, e=60, h=3;
вычисление ;
вычисление ;
вычисление ;
печать ‘a= 6.928’;
печать ‘b= 3.464’;
печать ‘c= 6’;
ПРОГРАММИРОВАНИЕ АЛГОРИТМОВ РАЗВЕТВЛЕННОЙ СТРУКТУРЫ
Цель работы: Изучение базовой алгоритмической конструкции «ветвление». Изучение структуры логических операций. Изучение операторов условного перехода (IF…THEN…ELSE…), выбора (CASE), безусловного перехода (GOTO).
Задание 1.
Постановка задачи:
Написать программу для расчета числа P, при вводе с клавиатуры числа х. Если число x принадлежит отрезкам [3;8] и [1;5], то число Р присвоить значение равное , в противном случае нахождением тангенса числа х ( ).
Таблица 4 - Таблица внешних спецификаций:
|
Имя переменной |
Назначение переменной |
Тип переменной |
Единицы измерения |
Входные данные |
x |
вводимое число |
integer |
- |
Выходные данные |
P |
число |
integer |
- |
Расчет контрольных примеров :
При x=3, P= =9;
При x=0, P= =0;
Блок-схема:
_ +
Рисунок 4 – Блок-схема к заданию №1
Программная реализация:
Program Laba3_P;
uses
crt;
var
x,P: real;
begin
clrscr;
Writeln ('Введите значение x');
Write ('x= ');
Readln (x);
if ((x>=3) and (x<=8)) and ((x>=1) and (x<=5)) then
begin
P:=sqr(x);
end
else
begin
P:=(sin(x)/cos(x))*(PI/180);
end;
Writeln ('Результат: ');
Writeln ('P= ', P:5:3);
Readln;
end.
Протокол выполнения программы:
1) в процессе диалога с пользователем вводим значения x=3;
2) условие (x>=3, x<=8) и (x>=1, x<=5) выполняется, переходим к шагу 3;
3) вычисление P:=sqr(x);
4) вычисление P:=(sin(x)/cos(x))*(PI/180);
5) печать ‘P=9.000’
1) в процессе диалога с пользователем вводим значения x=0;
2) условие (x>=3, x<=8) и (x>=1, x<=5) не выполняется, переходим к шагу 4;
3) вычисление P:=sqr(x);
4) вычисление P:=(sin(x)/cos(x))*(PI/180);
5) печать ‘P=0.000’
Задание 2.
Постановка задачи:
Написать программу для определения площади треугольника, при вводе с клавиатуры координат вершин. Если вершины треугольника образуют прямоугольный треугольник.
Математическая формулировка задачи:
Треугольник будет прямоугольным, если координата x у двух вершин будет совпадать, и координата y у двух вершин тоже будет одинаковой. Треугольник будет прямоугольный, если будет выполняться условие, что квадрат одной стороны равен сумме квадратов двух других сторон.
Таблица 5 - Таблица внешних спецификаций:
|
Имя переменной |
Назначение переменной |
Тип переменной |
Единицы измерения |
Входные данные |
x1 x2 x3 y1 y2 y3 |
Координата x первой вершины Координата x второй вершины Координата x третьей вершины Координата y первой вершины Координата y второй вершины Координата y третьей вершины |
integer integer integer integer integer integer |
- - - - - - |
Промежуточные данные |
a b c |
Сторона треугольника a Сторона треугольника b Сторона треугольника c |
real real real |
см см см |
Выходные данные |
S - |
Площадь треугольника Треугольник не прямоугольный |
Real - |
см2 - |
Расчет контрольных примеров :
При x1=1, y1=1, x2=1, y2=5, x3=5, y3=1 |=> треугольник прямоугольный, S=8.
При x1=1, y1=2, x2=3, y2=4, x3=5, y3=6 |=> треугольник не прямоугольный.
Блок-схема:
Рисунок 5 – Блок-схема к заданию №2
Программная реализация:
Program Laba3_treug;
uses
crt;
var
x1,y1,x2,y2,x3,y3: integer;
a,b,c,S: real;
begin
clrscr;
Writeln ('Введите значение координат первой точки');
Write ('x1= ');
Readln (x1);
Write ('y1= ');
Readln (y1);
Writeln ('Введите значение координат второй точки');
Write ('x2= ');
Readln (x2);
Write ('y2= ');
Readln (y2);
Writeln ('Введите значение координат третьей точки');
Write ('x3= ');
Readln (x3);
Write ('y3= ');
Readln (y3);
a:=sqrt(sqr(y3-y2)+sqr(x3-x2));
b:=sqrt(sqr(y3-y1)+sqr(x3-x1));
c:=sqrt(sqr(y2-y1)+sqr(x2-x1));
if a=sqrt(sqr(b)+sqr(c)) then
begin
S:=b*c/2;
Writeln (Результат: ');
Writeln ('Треугольник прямоугольник. S= ', S:5:3);
end
else
if b=sqrt(sqr(a)+sqr(c)) then
begin
S:=a*c/2;
Writeln ('Результат: ');
Writeln ('Треугольник прямоугольник. S= ', S:5:3);
end
else
if c=sqrt(sqr(b)+sqr(a)) then
begin
S:=a*b/2;
Writeln ('Результат: ');
Writeln ('Треугольник прямоугольник. S= ', S:5:3);
end
else
begin
Writeln ('Результат: ');
Writeln ('Треугольник не прямоугольник ');
end;
Readln;
end.
Протокол выполнения программы:
1) в процессе диалога с пользователем вводим значения координат точек: x1=1, y1=1, x2=1, y2=5, x3=5, y3=1;
2) находим длины стороны a, b и c;
3) проверяем условие, что треугольник прямоугольный (квадрат стороны равен сумме квадратов двух других сторон);
4)условие выполняется, вычисление S:=a*b/2;
5) печать ‘Треугольник прямоугольный’ S=8.000;
1) в процессе диалога с пользователем вводим значения координат точек: x1=1, y1=2, x2=3, y2=4, x3=5, y3=6;
2) находим длины стороны a, b и c;
3) проверяем условие, что треугольник прямоугольный (квадрат стороны равен сумме квадратов двух других сторон);
4)условие не выполняется, вычисление S не происходит;
5) печать ‘Треугольник не прямоугольный’;
ПРОСТЕЙШАЯ ЦЕЛОЧИСЛЕННАЯ АРИФМЕТИКА
Цель: Изучение основ целочисленного программирования. Целочисленные операции (DIV, MOD). Целочисленные функции (INT, ROUND, TRUNC).
Задание 1.
Постановка задачи:
Написать программу для определения дня недели, при вводе с клавиатуры номер дня года (k). Если 1 января было понедельником и дна недели пронумерованы следующим образом: 0-воскресенье, 1-понедельник, 2-вторник, …, 6-суббота.
Таблица 6 - Таблица внешних спецификаций:
|
Имя переменной |
Назначениепеременной |
Тип переменной |
Единицы измерения |
Входные данные |
k |
Номер дня года |
integer |
- |
Выходные данные |
- |
День недели |
- |
- |
Расчет контрольных примеров:
При k=12, 5-пятница;
При k=365, 1-понедельник;
Блок-схема:
Рисунок 6 – Блок-схема к заданию №1
Программная реализация:
program laba_4;
uses
crt;
var K: integer;
begin
clrscr;
repeat
writeln(‘Программа определяет номер дня недели по количеству дней, прошедших от 01.01(понедельник)');
writeln('Если: ');
writeln('0-воскресенье');
writeln('1-понедельник');
writeln('2-вторник');
writeln('3-среда');
writeln('4-четверг');
writeln('5-пятница');
writeln('6-суббота ');
writeln('Введите день года (K): ');
readln(K);
until (K>0) and (K<366);
case K mod 7 of
0:write(‘0-воскресенье’);
1:write(‘1-понедельник’);
2:write(‘2-вторник’);
3:write(‘3-среда’);
4:write(‘4-четверг’);
5:write(‘5-пятница’);
6:write(‘6-суббота’);
end;
readln;
end.
Протокол выполнения программы:
1) в процессе диалога с пользователем вводим значения k=12;
2) условие (k>0) и (k<366) выполняется, программа выполняется;
3) вычисление k mod 7;
4) печать ‘5-пятница’
1) в процессе диалога с пользователем вводим значения k=365;
2) условие (k>0) и (k<366) выполняется, программа выполняется;
3) вычисление k mod 7;
4) печать ‘1-понедельник’
ОПЕРАТОРЫ ЦИКЛА (FOR TO/DOWNTO DO).
Цель: Изучение базовой алгоритмической конструкции «цикл». Изучение оператора цикла с параметром (FORTO/DOWNTODO),вложенных циклов с параметром.
Задание 1.
Дано вещественное число А и целое число N (>0).Написать программу, в которой, используя один цикл, выводится число A в степени N ( ).
Таблица 7 - Таблица внешних спецификаций:
|
Имя переменной |
Назначение переменной |
Тип переменной |
Единицы измерения |
Входные данные |
a n |
вводимое число вводимое число |
real integer |
- |
Промежуточные вычисления |
i |
параметр цикла |
integer |
- |
Выходные данные |
p |
выводимое число |
real |
- |
Расчет контрольных примеров:
При a=2, n=6:
= =64.
При a=-9, n=2:
= =81.
Блок-схема:
Рисунок 7 – Блок-схема к заданию №1
Программная реализация:
program laba5_1;
uses
crt;
var
n,i:integer;
a,p:real;
begin
clrscr;
write('Введите число A: ');
readln(a);
write('Введите степень, число N: ');
readln(n);
p:=1;
for i:=1 to N do
p:=p*a;
writeln(a:2:1,'в степени ',n,'=', p:6:2);
readln;
end.
Протокол выполнения программы:
1) в процессе диалога с пользователем вводим значения a=2, n=6
2) присваиваем p=1;
3) цикл условие i=1 до n=6 выполняется;
4) вычисление p:=p*a;
5) печать ‘2.0 в степени 6= 64.00’
1) в процессе диалога с пользователем вводим значения a=-9, n=2;
2) присваиваем p=1;
3) цикл условие i=1 до n=2 выполняется;
4) вычисление p:=p*a;
5) печать ‘-9.0 в степени 2= 81.00’;
Задание 2.
Дано целое число N (>0). Последовательность вещественных чисел AK определяется следующим образом: A0 = 1, AK = (AK −1 + 1)/K, K = 1, 2, . . . . Вывести элементы A1, A2, . . . , AN
Таблица 8 - Таблица внешних спецификаций:
|
Имя переменной |
Назначение переменной |
Тип переменной |
Единицы измерения |
Входные данные |
n |
вводимое число |
integer |
- |
Промежуточные вычисления |
k |
параметр цикла |
integer
|
- |
Выходные данные |
Ak |
значение выражения |
real |
- |
Расчет контрольных примеров:
При n=4: a1=2; a2=1.5; a3=0.8; a4=0.5;
При n=6: a1=2; a2=1.5; a3=0.8; a4=0.5; a5=0.3; a6=0.2;
Блок-схема:
Рисунок 8 – Блок-схема к заданию №2
Программная реализация:
program laba5_3;
uses
crt;
var
n,k:integer;
Ak:real;
begin
clrscr;
writeln('Введите число элементов N: ');
readln(n);
Ak:=1;
for k:=1 to N do
begin
Ak:=(Ak+1)/k;
write('A');
write(k);
writeln('=', Ak:6:3);
end;
readln;
end.
Протокол выполнения программы:
1) в процессе диалога с пользователем вводим значения n=4;
2) присваиваем Ak=1;
3) цикл условие k=1 до n=4 выполняется;
4) вычисление Ak:=(Ak+1)/k;
5) печать ‘A1=2.000’;
6) печать ‘A2=1.500’;
7) печать ‘A3=0.833’;
8) печать ‘A4=0.458’;
1) в процессе диалога с пользователем вводим значения n=6;
2) присваиваем Ak=1;
3) цикл условие k=1 до n=6 выполняется;
4) вычисление Ak:=(Ak+1)/k;
5) печать ‘A1=2.000’;
6) печать ‘A2=1.500’;
7) печать ‘A3=0.833’;
8) печать ‘A4=0.458’;
9) печать ‘A5=0.292’;
10) печать ‘A6=0.215’;
Задание 3.
Вычислить .
Таблица 9 - Таблица внешних спецификаций:
|
Имя переменной |
Назначение переменной |
Тип переменной |
Единицы измерения |
Входные данные |
- |
- |
- |
- |
Промежуточные вычисления |
a b |
параметр цикла параметр цикла |
integer integer |
- - |
Выходные данные |
y |
выводимое число |
real |
- |
Расчет контрольных примеров:
y=(3+2+1+0)*(4+3+2+1)*(7+6+5+4)*(12+11+10+9)=55440
Блок-схема:
Рисунок 9 – Блок-схема к заданию №3
Программная реализация:
program laba5_4;
uses
crt;
var
a,b:integer;
p,s,y:real;
begin
clrscr;
s:=0;
p:=1;
for a:=0 to 3 do
begin
for b:=3 down to 0 do
s:=s+(sqr(a)+b);
p:=p*s;
s:=0;
end;
y:=p;
writeln('y=', y:6:1);
readln;
end.
Протокол выполнения программы:
1) Присваиваем s:=0;
2) Присваиваем p:=1;
3) Цикл условие внешний a=0 до 3 выполняется;
4) Вложенный цикл условие b=3 до 0 выполняется;
5) Вычисление во вложенном цикле s:=s+(sqr(a)+b);
6) Вычисление во внешнем цикле p:=p*s;
7) Присваиваем s:=0;
7) Присваиваем y:=p;
8) Печать (‘y=55440.0’);
Задание 4.
Даны целые положительные числа A и B (A < B). Вывести все целые числа от A до B включительно; при этом каждое число должно выводиться столько раз, каково его значение (например, число 3 выводится 3 раза).
Таблица 10 - Таблица внешних спецификаций:
|
Имя переменной |
Назначение переменной |
Тип переменной |
Единицы измерения |
Входные данные |
|
- |
- |
- |
Промежуточные вычисления |
a b |
параметр цикла параметр цикла |
integer integer |
- - |
Выходные данные |
y |
выводимое число |
real |
- |
Расчет контрольных примеров:
При a=1, b=3:
i=3: число один выводится – 1 раз, число два – 2 раза, три – 3 раза.
При a=3, b=5:
i=3: число три выводится – 3 раза, число четыре – 4 раза, пять – 5 раз.
Блок-схема:
Рисунок 10 – Блок-схема к заданию №4
Программная реализация:
program laba5_5;
uses
crt;
var
a,b,raz,c,i:integer;
begin
clrscr;
repeat
writeln('Введите число a: ');
readln(a);
writeln('Введите число b: ');
readln(b);
until (a<b);
for i:=a to b do
for raz:=1 to i do
writeln(‘Все целые числа от A до B: ',i);
readln;
end.
Протокол выполнения программы:
1) в процессе диалога с пользователем вводим значения a=1, b=3;
2) внешний цикл условие i=a=1 до b=3 выполняется;
3) внутренний цикл условие raz=1 до i выполняется;
4) печать ‘Все целые числа от A до B: 1’;
5) печать ‘Все целые числа от A до B: 2, 2’;
6) печать ‘Все целые числа от A до B: 3, 3, 3’.
1) в процессе диалога с пользователем вводим значения a=3, b=5;
2) внешний цикл условие i=a=3 до b=5 выполняется;
3) внутренний цикл условие raz=1 до i выполняется;
4) печать ‘Все целые числа от A до B: 3, 3, 3’;
5) печать ‘Все целые числа от A до B: 4, 4, 4, 4’;
6) печать ‘Все целые числа от A до B: 5, 5, 5, 5, 5’.
ОПЕРАТОРЫ ЦИКЛА (REPEAT UNTIL/WHILE DO).
Цель: Изучение базовой алгоритмической конструкции «цикл». Изучение оператора цикла с предусловием (WHILE DO), цикла с постусловием (REPEAT UNTIL)
Задание 1.
Дано целое число N (>0). С помощью операций деления нацело и взятия остатка от деления определить, имеется ли в записи числа N цифра «2». Если имеется, то вывести TRUE, если нет – вывести FALSE.
Таблица 11 - Таблица внешних спецификаций:
|
Имя переменной |
Назначение переменной |
Тип переменной |
Единицы измерения |
Входные данные |
n |
вводимое число |
integer |
- |
Промежуточные вычисления |
- |
- |
- |
- |
Выходные данные |
k |
выводимое значение |
boolean |
- |
Расчет контрольных примеров:
При n=247:
k=TRUE.
При n=4578:
k=FALSE.
Блок-схема:
Рисунок 11 – Блок-схема к заданию №1
Программная реализация:
program laba6_3;
uses
crt;
var n: integer;
k: boolean;
begin
clrscr;
write('Введите число N: ');
readln(n);
k:=false;
while n<>0 do
begin
if n mod 10=2 then k:=true;
n:= n div 10;
end;
writeln(k);
readln;
end.
Протокол выполнения программы:
1) в процессе диалога с пользователем вводим значения n=247;
2) присваиваем k:=FALSE;
3) цикл предусловие while n<>0 do выполняется;
4) проверка условия n mod 10=2, условие выполняется;
5) присваиваем k:=TRUE;
6) вычисление n:= n div 10;
7) печать ‘TRUE’.
1) в процессе диалога с пользователем вводим значения n=4587;
2) присваиваем k:=FALSE;
3) цикл предусловие while n<>0 do выполняется;
4) проверка условия n mod 10=2, условие не выполняется;
5) вычисление n:= n div 10;
6) печать ‘FALSE’