В настоящее время всю большую значимость и актуальность получили системы структурного и объектно-ориентированного программирования, которые позволяют работать с процедурными типами данных. Наиболее подходящими для первоначального освоения программирования являются язык программирования Turbo Pascal, который дает возможность освоить разработку программного кода с использованием разветвляющихся вычислительных процессов.
Вложение | Размер |
---|---|
cbornik_gerasimova.docx | 28.32 КБ |
БОУ ОО СПО «Болховский педагогический колледж»
Сборник задач по теме:
«Разветвляющиеся вычислительные процессы в языке программирования Turbo Pascal»
Болхов, 2014г.
БОУ ОО СПО «Болховский педагогический колледж»
Сборник задач по теме:
«Разветвляющиеся вычислительные процессы в языке программирования Turbo Pascal»
Болхов, 2014г.
В настоящее время всю большую значимость и актуальность получили системы структурного и объектно-ориентированного программирования, которые позволяют работать с процедурными типами данных. Наиболее подходящими для первоначального освоения программирования являются язык программирования Turbo Pascal, который дает возможность освоить разработку программного кода с использованием разветвляющихся вычислительных процессов.
Составитель: Герасимова Е.Ю.
Верстка: Герасимова Е.Ю.
Содержание
Справочный материал……………………….......…3
I. Задачи по теме : «Ветвление в Turbo Pascal»…16
II.Задачи для самостоятельного решения……….22
1.Группа А…………………………………………22
2. Группа Б…………………………………………26
3. Группа В……………………………………..….30
Список использованной литературы………….....32
1. Разветвляющийся вычислительный процесс и условный оператор
Главное, чего недостает нашим первым программам -- гибкости и умения принимать решения. Ведь уже несложный алгоритм решения квадратного уравнения предусматривает два варианта расчета, реальные же алгоритмы могут выдавать результаты, зависящие от десятков и сотен условий.
Разветвляющийся вычислительный процесс реализуется по одному из нескольких направлений вычисления (ветвей алгоритма). Выбор одной из ветвей зависит от истинности или ложности некоторого условия (логического выражения), включенного в состав условного оператора. Программа должна учитывать все возможные ветви вычислений. При запуске программы, в зависимости от данных, выполняется только одна из возможных ветвей.
1.1 Логические выражения
Логические выражения (ЛВ) строятся из АВ, операций отношения, логических операций и круглых скобок.
Результатом вычисления ЛВ является одно из двух значений: true или false.
1.2 Операции отношения
Операции отношения (сравнения) имеют следующий общий вид:
АВ1 ОО АВ2
где АВ -- арифметические выражения,
О -- один из следующих знаков операций:
< <= > >= = < >
Последний знак обозначает отношение "не равно". Обратите также внимание на запись отношений "меньше или равно", "больше или равно".
В любое логическое выражение должна входить хотя бы одна операция отношения.
Приведем примеры логических выражений, включающих одну ОО:
d<0 -- выбор ветви вычислений зависит от значения d;
sqr(x)+sqr(y)<=sqr(r) -- результат будет равен true для точек с координатами (x, y), лежащих внутри круга радиуса R с центром в начале координат;
cos(x)>1 -- результат этого ЛВ всегда равен false.
К вещественным значениям в общем случае неприменима операция = ("равно") из-за неточного представления этих значений в памяти компьютера. Поэтому для вещественных переменных отношение вида a=b часто заменяется на abs(a-b)
1.3 Логические операции
Логические операции применимы только в логических выражениях и служат для составления сложных условий, требующих более одной операции отношения.
Операция NOT применима к одному логическому выражению (является унарной). Ее результат равен true, если выражение ложно и наоборот.
Например, выражение NOT (sin(x)>1) всегда даст значение true.
Операция AND связывает не менее двух логических выражения (является бинарной). Ее результат равен true, если все выражения истинны или false, если хотя бы одно из выражений ложно.
В качестве примера распишем выражение . Т. к. операции принадлежности в Паскале нет, используем операцию AND и операции отношения: (x>=a) and (x<=b).
Математическое выражение a,b,c>0 (одновременно) будет иметь вид (a>0) and (b>0) and (c>0).
Операция OR также связывает не менее двух логических выражений. Ее результат равен true, если хотя бы одно выражение истинно и false, если все выражения ложны.
Распишем выражение . На Паскале оно будет иметь вид(xb). Другой способ связан с применением операции NOT: not ((x>=a) and (x<=b)).
Условие "хотя бы одно из значений a,b,c положительно" может быть записано в виде (a>0) or (b>0) or (c>0) .
Условие "только одно из значений a,b,c положительно" потребует объединения возможностей операций AND и OR:
(a>0) and (b<=0) and (c<=0) or
(a<=0) and (b>0) and (c<=0) or
(a<=0) and (b<=0) and (c>0).
Операция XOR, в отличие от OR, возвращает значение "ложь" (false) и в том случае, когда все связанные ей логические выражения истинны. Чтобы лучше уяснить это отличие, составим так называемую таблицу истинности двух логических операций.
Для краткости значение false обозначим нулем, а true -- единицей. Для двух логических аргументов возможно всего 4 комбинации значений 0 и 1.
В качестве примера использования операции OR запишем условие "только одно из значений a,b положительно":
(a>0) or (b>0).
К сожалению, записать условие "только одно из значений a,b,c положительно" в напрашивающемся виде (a>0) or (b>0) or (c>0) нельзя -- результат этого выражения будет равен true и в случае, когда все три значения положительны. Связано это с тем, что при последовательном расчете логических выражений слева направо (1 or 1) or 1 будет равно 0 or 1 = 1.
С помощью xor удобно организовывать различного рода переключатели, которые последовательно должны принимать одно из двух состояний:
x := x or true; writeln ('x=', x);
x := x or true; writeln ('x=', x);
В составных условиях отдельные отношения необходимо заключать в круглые скобки, как и сделано во всех примерах раздела.
2. Короткий условный оператор
Это первый вид условного оператора, позволяющий программе выполнить или пропустить некоторый блок вычислений. Общий вид короткого условного оператора следующий:
if логическое_выражение then оператор1;
Сначала вычисляется логическое выражение, если оно имеет значение true, то выполняется оператор1, иначе оператор1 игнорируется.
Если по условию требуется выполнить несколько операторов, их необходимо заключить в операторные скобки begin...end;, образуя единый составной оператор:
if d>0 then begin
x1:=(-b+sqrt(d))/(2*a);
x2:=(-b-sqrt(d))/(2*a);
writeln (x1:8:3,x2:8:3);
end;
Здесь по условию d>0 выполняется 3 оператора, первые два из которых вычисляют корни x1 и x2 квадратного уравнения, а последний выводит на экран найденные значения корней.
Следующий пример иллюстрирует поиск значения y=max(a,b,c). Поскольку стандартной функции для нахождения максимума в Паскале нет, применим 2 коротких условных оператора:
y:=a;
if b>y then y:=b;
if c>y then y:=c;
Вообще, для условной обработки N значений требуется N-1 короткий условный оператор.
2.1 Полный условный оператор
Эта форма условного оператора позволяет запрограммировать 2 ветви вычислений. Общий вид полного условного оператора следующий:
if логическое_выражение then оператор1
else оператор2;
Оператор работает следующим образом: если логическое выражение имеет значение true, то выполняется оператор1, иначе выполняется оператор2. Всегда выполняется только один из двух операторов. Перед ключевым словом else ("иначе") точка с запятой не ставится, т.к. if-then-else -- единый оператор.
Вычислим значение m=min(x,y) с помощью полного условного оператора:
if x
В следующем примере выполним обработку двух переменных: если значения a и b одного знака, найти их произведение, иначе заменить нулями.
if a*b>0 then c:=a*b
else begin
a:=0; b:=0;
end;
Из примера видно, что к ветви алгоритма после ключевого слова else, состоящей более чем из одного оператора, также применяются операторные скобки.
2.2 Составной условный оператор
Эта форма условного оператора применяется, когда есть более 2 вариантов расчета. Общий вид составного оператора может включать произвольное число условий и ветвей расчета:
if логическое_выражение1 then оператор1
else if логическое_выражение2 then оператор2
...
else if логическое_выражениеN then операторN
else оператор0;
При использовании оператора последовательно проверяются логические выражения 1, 2, ... ,N, если некоторое выражение истинно, то выполняется соответствующий оператор и управление передается на оператор, следующий за условным. Если все условия ложны, выполняется оператор0 (если он задан). Число ветвей N неограниченно, ветви else оператор0; может и не быть.
Существенно то, что если выполняется более одного условия из N, обработано все равно будет только первое истинное условие. В показанной ниже программе составной условный оператор неверен, если ее разработчик хотел отдельно учесть значения x, меньшие единицы по модулю:
var x:real;
begin
write ('Введите x:'); readln (x);
if x<0 then writeln ('Отрицательный')
else if x=0 then writeln ('Ноль')
else if abs(x)<1 then
writeln ('По модулю меньше 1')
else writeln ('Больше 1');
end.
Условие x<0 сработает, например, для значения x=-0.5, что не позволит программе проверить условие abs(x)<1.
Еще одну распространенную ошибку работы с составным условным оператором показывает произведенный ниже расчет знака n переменной a:
if a<0 then n:=-1;
if a=0 then n:=0
else n:=1;
Применение одного короткого и одного полного условных операторов является здесь грубой ошибкой -- ведь после завершения короткого условного оператора для всех ненулевых значений a будет выполнено присваивание n:=1. Правильных вариантов этого расчета, по меньше мере, два:
if a<0 then n:=-1;
if a=0 then n:=0;
if a>0 then n:=1;
- с помощью 3 коротких условных операторов, вариант не очень хорош тем, что проверяет лишние условия даже тогда, когда знак уже найден.
if a<0 then n:=-1;
else if a<0 then n:=1;
else n:=0;
- с помощью составного условного оператора, этот вариант лучше. На практике следует помнить, что для вещественных значений сравнение с нулем может быть проблематично.
Можно сделать вывод, что при программировании многовариантных расчетов следует соблюдать осторожность, чтобы не допустить "потерянных" или неверно срабатывающих ветвей алгоритма.
Перепишем функцию в аналитическом виде:
Одним из вариантов запрограммировать вычисление y(x) мог бы быть следующий:
if abs(x)>1 then y:=0
else if x<0 then y:=x+1
else y:=1-x;
Возможна и последовательная проверка условий слева направо, которая породит немного избыточный, но легче воспринимающийся код:
if x<-1 then y:=0
else if x<0 then y:=x+1
else if x<1 then y:=1-x
else y:=0;
Задачи по теме : «Ветвление в Turbo Pascal »
Задача №1
Составить алгоритм, определяющий максимальное значение из 2-
х целых чисел.
Program zadacha;
Var a, b, max : integer;
begin
Writeln ('Введите 2 целых числа');
Readln (a,b);
if a>b then max := a else max := b;
Writeln (max);
end.
Задача №2.
Cоставить программу, удваивающую значение целой переменной а, если а > 5.
Program zadacha;
Var a : integer;
Begin
Writeln ('Введите число');
Readln (a);
If a > 5 then a : = a * 2;
Writeln (' a = ', a);
End.
Задача №3.
Написать программу, которая определит, имеете ли Вы право голосовать: если Вам 18 и более лет – имеет право голосовать, если менее 18 лет – не имеет право голосовать.
Program zadacha;
Var a,b: integer;
Begin
Writeln ('Введите возраст');
Readln (a);
If a<18 then b:=(‘ne imeet prava golosovat’) else b:=(‘imeet pravo golosovat’);
Writeln (b);
End.
Задача №4.
Ввести число. Если оно положительно, вычесть из него 50, в противном случае прибавить к нему 100.
Program z;
Var a, b : integer;
Begin
b : = 0;
Writeln ('Введите число');
Readln (a);
if a > 0 then b : = a - 50 else b : = a + 100;
Writeln(b);
end.
Задача №5.
Даны два числа. Вычесть из большего меньшее.
Program ura;
Var x,y,z : integer;
Begin
Writeln ('Введите числa');
Readln (x,y);
if x > y then z : = a - b else z : = b - a;
Writeln(z);
end.
Задача №6.
Найти большее из двух чисел А и В. Результат обозначить С.
Program chislo;
Var A,B,C : integer;
Begin
Readln (A,B);
if A>B then C : = A else C : = B;
Writeln (C);
end.
Задача №7.
Составить программу, позволяющую поменять знак переменной при условии, что она отрицательна. (Если переменная принимает положительное значение, то оставить эту переменную без изменений).
Program p1;
Var a : real;
Begin
Writeln ('Vvedite znachenie peremennoi');
Readln (a);
s:=pi*sqr(r);
if a<0 then a:=-a;
Writeln (a);
Readln;
End.
Задача №8.
Ввести число. Если оно положительное, то вычислить корень числа, если же отрицательное, то возводит его в квадрат.
Program p1;
Var a : integer;
y : real;
Begin
Writeln ('Введите число а');
Readln (a);
if a > 0 then y : = sqrt (a) else y : = a * a;
Writeln (y : 3 : 1);
End.
Задача №9.
Ввести рост человека. Вывести на экран "ВЫСОКИЙ”, если его рост превышает 180 см, и "НЕ ОЧЕНЬ ВЫСОКИЙ” в противном случае.
Program rost;
Var a : integer;
Begin
Writeln ('Введите рост');
Readln (a);
if a > 180 then writeln ('ВЫСОКИЙ') else writeln ('НЕ ОЧЕНЬ ВЫСОКИЙ');
End.
II.Задачи для самостоятельного решения
Каждый студент должен решить либо по две задачи из групп A, Б и одну – из группы В, либо одну задачу из группы В. Привести блок-схемы решения задач из групп Б.
1.Группа А
1. Даны три действительные числа. Возвести в квадрат те из них, значения которых неотрицательны, и в четвертую степень — отрицательные.
2. Даны две точки А(x1, y1) и В(x2, y2). Составить алгоритм, определяющий, которая из точек находится ближе к началу координат.
3. Даны два угла треугольника (в градусах). Определить, существует ли такой треугольник. Если да, то будет ли он прямоугольным.
4. Даны действительные числа x и y, не равные друг другу. Меньшее из этих двух чисел заменить половиной их суммы, а большее — их удвоенным произведением.
5. На плоскости XOY задана своими координатами точка А. Указать, где она расположена: на какой оси или в каком координатном угле.
6. Даны целые числа m, n. Если числа не равны, то заменить каждое из них одним и тем же числом, равным большему из исходных, а если равны, то заменить числа нулями.
7. Дано трехзначное число N. Проверить, будет ли сумма его цифр четным числом.
8. Определить, равен ли квадрат заданного трехзначного числа кубу суммы цифр этого числа.
9. Определить, является ли целое число N четным двузначным числом.
10. Определить, является ли треугольник со сторонами a, b, c равносторонним.
11. Определить, является ли треугольник со сторонами a, b, c равнобедренным .
12. Определить, имеется ли среди чисел a, b, c хотя бы одна пара взаимно противоположных чисел.
13. Подсчитать количество отрицательных чисел среди чисел a, b, c.
14. Подсчитать количество положительных чисел среди чисел a, b, c.
15. Подсчитать количество целых чисел среди чисел a, b, c.
16. Определить, делителем каких из чисел a, b, c является число k.
17. Услуги телефонной сети оплачиваются по следующему правилу: за разговоры до А минут в месяц оплачиваются В р., а разговоры сверх установленной нормы оплачиваются из расчета С р. в минуту. Написать программу, вычисляющую плату за пользование телефоном для введенного времени разговоров за месяц.
18. Даны три стороны одного и три стороны другого треугольника. Определить, будут ли эти треугольники равновеликими, т.е. имеют ли они равные площади.
19. Программа-льстец. На экране появляется вопрос “Какой ты: высокий или невысокий? Введи В или Н”. В зависимости от ответа на экране должен появиться текст “Мне нравятся высокие люди!” или “Мне нравятся невысокие люди!”.
20. Грузовой автомобиль выехал из одного города в другой со скоростью v1 км/ч. Через t ч в этом же направлении выехал легковой автомобиль со скоростью v2 км/ч. Составить программу, определяющую, догонит ли легковой автомобиль грузовой через n ч после своего выезда.
21. Перераспределить значения переменных x и y так, чтобы в x оказалось большее из этих значений, а в y — меньшее.
22. Определить правильность даты, введенной с клавиатуры (число — от 1 до 31, месяц — от 1 до 12). Если введены некорректные данные, то сообщить об этом.
23. Составить программу, определяющую результат гадания на ромашке — “любит — не любит”, взяв за исходное данное количество лепестков n.
2. Группа Б
1. Написать программу нахождения суммы большего и меньшего из 3 чисел.
2. Написать программу, определяющую по длинам сторон треугольника, является ли он прямоугольным. Если треугольник не прямоугольный, то вычислить косинус угла, лежащего против большей стороны.
3. Найти max{min{a, b}, min{c, d}}.
4. Даны три числа а, b, с. Определить, какое из них равно d. Если ни одно не равно d, то найти max{d-a, d-b, d-c}.
5. Даны четыре точки А1 (x1, y1), A2 (x2, y2), А3 (x3, y3), А4 (x4, y4). Определить, будут ли они вершинами параллелограмма.
6. Даны три точки А (x1, y1), B (x2, y2), C (x3, y3). Определить, будут ли они расположены на одной прямой. Если нет, то вычислить периметр треугольника ABC.
7. Даны действительные числа а, b, с. Удвоить эти числа, если а
8. На оси ОХ расположены три точки а, b, с. Определить, какая из точек b,c расположена ближе к а.
9. Даны три положительных числа а, b, с. Проверить, могут ли они быть длинами сторон треугольника. Если да, то вычислить площадь этого треугольника.
10. Написать программу решения уравнения ax3 + bх = 0 для произвольных а, b.
11. Дан круг радиуса R. Определить, поместится ли правильный треугольник со стороной а в этом круге.
12. Даны числа x, y, z. Найти значение выражения:
13. Дано число x. Напечатать в порядке возрастания числа: sinx, cosx. lnx. Если при каком-либо x некоторые из выражений не имеют смысла, вывести сообщение об этом и сравнивать значения только тех, которые имеют смысл.
14. Заданы размеры A, B прямоугольного отверстия и размеры X, Y, Z кирпича. Определить, пройдет ли кирпич через отверстие.
15. Составить программу, осуществляющую перевод величин из радианной меры в градусную или наоборот. Программа должна запрашивать, какой перевод нужно осуществить, и выполнять указанное действие.
16. Два прямоугольника, расположенные в первом квадранте, со сторонами, параллельными осям координат, заданы координатами своих левого верхнего и правого нижнего углов. Для первого прямоугольника это точки (x1, y1) и (x2, 0), для второго — (x3, y3), (x4, 0) Составить программу, определяющую, пересекаются ли данные прямоугольники, и вычисляющую площадь общей части, если они пересекаются.
17. В небоскребе N этажей и всего один подъезд; на каждом этаже по 3 квартиры; лифт может останавливаться только на нечетных этажах. Человек садится в лифт и набирает номер нужной ему квартиры М. На какой этаж должен доставить лифт пассажира?
18. Написать программу, которая по заданным трем числам определяет, является ли сумма каких-либо двух из них положительной.
19. Известно, что из четырех чисел a1, a2, a3 и a4 одно отлично от трех других, равных между собой; присвоить номер этого числа переменной n.
20. Составить программу, которая проверяла бы, не приводит ли суммирование двух целых чисел А и В к переполнению (т.е. к результату большему, чем 32767). Если будет переполнение, то сообщить об этом, иначе вывести сумму этих чисел.
3. Группа В
1. Даны действительные числа a, b, c (a > 0). Полностью исследовать биквадратное уравнение ax4 + bх2 + с = 0, т.е. если действительных корней нет, то должно быть выдано сообщение об этом, иначе найти действительные корни, сообщив, сколько из них являются различными.
2. Дана точка А(х, у). Определить, принадлежит ли она треугольнику с вершинами в точках (x1, y1), (x2, y2), (x3, y3).
3. Написать программу, определяющую, будут ли прямые А1х + В1у + С = 0 и А2х + В2у + С = 0 перпендикулярны. Если нет, то найти угол между ними.
4. Если сумма трех попарно различных действительных чисел X, Y, Z меньше единицы, то наименьшее из этих трех чисел заменить полусуммой двух других; в противном случае заменить меньшее из X, Y полусуммой двух оставшихся значений.
5. Написать программу решения системы линейных уравнений
a1x + b1y = c1
a2x + b2y = c2
6. Даны три положительных числа. Определить, можно ли построить треугольник с длинами сторон, равным этим числам. Если можно, то ответить на вопрос, является ли он остроугольным.
7. Найти координаты точек пересечения прямой y = kx + b и окружности радиуса R с центром в начале координат. В каких координатных четвертях находятся точки пересечения? Если точек пересечения нет или прямая касается окружности, выдать соответствующее сообщение.
8. Заданы координаты вершин прямоугольника: (x1, y1), (x2, y2), (x3, y3), (x4, y4). Определить площадь части прямоугольника, расположенной в I-й координатной четверти.
Список использованной литературы:
1.Информатика. Серия «Учебники и учебные пособия». // Под ред. П.П.Беленького. – Ростов-н/Д: Феникс, 2004. – 448 с.
2. Андреев Е.В. Информатика. Основы алгоритмизации. Тетрадь с печатной основой. – Саратов: «Лицей», 1999 – 80 с.
3.Кушниренко А.Г. и др. Основы информатики и ВТ: Проб. учеб. для сред. учеб.завед. – 2-е изд. – М.: Просвещение, 1991 – 224 с.
4. Информатика 7 – 9 кл., Базовый курс. Теория. / Под ред. Н.В. Макаровой. –СПб.: Питер, 2004. – 368 с.: ил.
5. Кошелев М.В. Итоговые тесты по информатике: 10-11 классы: к учебникам Н.Д. Угриновича “Информатика и информационные технологии: 10-111 кл.” и А.Г. Гейна, А.И. Сенокосова, М.: Издательство “Экзамен”, 2006. –222
6.Окулов. С.М., Основы программирования. – 3-е изд. – M: БИНОМ. Лаборатория знаний, 2006.
7.Семакин И.Г., Залогова Л.А., Русаков С.В., Шестакова Л.В., Информатика. Базовый курс для 7 -9 кл. – М. Лаборатория Базовых Знаний, 2004.
8. http://hosting.ulstu.ru/ip/index.html
http://www.vzmakh.ru/info/pascal/default.htm
9. Вальвачев А.Н., Крисевич В.С. Программирование на языке Паскаль для персональных ЭВМ: Справочное пособие.-Минск: Вышейш. шк., 1989.-223с.
10. Фаронов В.В. Турбо Паскаль 7.0. Начальный курс. Учебное пособие. – М.: Нолидж, 2000. – 576с
Рисуем ананас акварелью
Для чего нужна астрономия?
Солнечная система. Взгляд со стороны
Рисуем акварельное мороженое
Рисуем крокусы акварелью