Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПРАКТИКУМ_4.doc
Скачиваний:
43
Добавлен:
14.02.2016
Размер:
17.32 Mб
Скачать

Кафедра прикладной математики

ПРАКТИКУМ № 4.

ТЕМА: РЕАЛИЗАЦИЯ В ИНТЕГРИРОВАННОЙ СРЕДЕ ПРОГРАММИРОВАНИЯ TURBO PASCAL АЛГОРИТМОВ РАЗВЕТВЛЯЮЩЕЙСЯ СТРУКТУРЫ.

Цель работы: приобретение навыков работы в интегрированной среде программирования TURBO PASCAL; получить навыки программирования алгоритмов разветвляющейся структуры и реализации их на ЭВМ.

В линейной программе все операторы выполняются последовательно, один за другим. Таким способом можно записывать только очень простые алгоритмы. Для того чтобы в зависимости от конкретных значений исходных данных обеспечить выполнение разных последовательностей операторов, применяются операторы ветвления if и case.

Оператор if обеспечивает передачу управления на одну из двух ветвей вычислений, а оператор case – на одну из произвольного числа ветвей.

Индивидуальные задания

ЗАДАНИЕ № 1.

Составить алгоритм и написать программу, которая по введенному значению аргумента вычисляет значение функции, заданной в виде графика. Параметр R вводится с клавиатуры.

Номер

варианта

ЗАДАНИЕ

1.

2.

3.

4.

5.

6.

7.

8.

9.

10.

11.

12.

13.

14.

15.

16.

17.

18.

19.

20.

21.

22.

23.

24.

25.

ЗАДАНИЕ № 2.

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

Номер

варианта

ЗАДАНИЕ

Номер

варианта

ЗАДАНИЕ

1.

2.

3.

4.

5.

6.

7.

8.

9.

10.

11.

12.

13.

14.

15.

16.

17.

18.

19.

20.

21.

22.

23.

24.

25.

ЗАДАНИЕ № 3.

Составить алгоритм и написать программу с использованием оператора варианта.

Номер

варианта

ЗАДАНИЕ

1.

Разработать программу, которая вычисляет одну из функций в указанной точке.

Вид простейшего меню:

введите номер функции:

1) y=x

2) y=sqrt(x)

3) y=exp(1/3*ln(x))

4) y=sqrt(sqrt(x))

2.

Разработать программу, которая выводит на экран дисплея значения функции sin(t) при различных значениях аргумента t.

Код

аргумента

1

2

3

4

5

Строка меню

sin(0)

sin(pi/6)

sin(pi/4)

sin(pi/3)

sin(pi/2)

Выводимая строка

0’

1/2’

sqrt(2)/2’

sqrt(3)/2’

1’

3.

Разработать программу, которая вычисляет значение одной из заданных функций в указанной точке.

Вид простейшего меню:

введите номер функции:

1) y=exp(1)

2) y=exp(2)

3) y=exp(3)

4) y=exp(4)

4.

Разработать программу, которая выводит на экран дисплея значения функции cos(t) при различных значениях аргумента t.

Код

аргумента

1

2

3

4

5

Строка меню

cos(0)

cos(pi/6)

cos(pi/4)

cos(pi/3)

cos(pi/2)

Выводимая строка

1’

sqrt(3)/2’

sqrt(2)/2’

1/2’

0’

5.

Разработать программу, которая вычисляет значение одной из заданных функций в указанной точке.

Вид простейшего меню:

введите номер функции:

1) y=sqrt(2)

3) y=sqrt(3)

5) y=sqrt(5)

6.

Разработать программу, которая выводит на экран дисплея значения функции tg (t) при различных значениях аргумента t.

Код

Аргумента

0

6

4

3

2

Строка меню

tg(0)

tg(pi/6)

tg(pi/4)

tg(pi/3)

tg(pi/2)

Выводимая строка

0’

sqrt(3)/3’

1’

sqrt(3)’

не сущ.

7.

Разработать программу, которая вычисляет значение одной из заданных функций в указанной точке.

Вид простейшего меню:

введите номер функции:

11) y=sqrt(11)

12) y=sqrt(12)

13) y=sqrt(13)

14) y=sqrt(14)

8.

Разработать программу, которая выводит на экран дисплея название ансамбля из некоторого числа исполнителей.

Вид простейшего меню:

введите номер ансамбля:

1) 2 человека ‘ дуэт’

2) 3 человека ‘трио’

3) 4 человека ‘квартет’

4) 5 человек квинтет

9.

Разработать программу, которая выводит на экран дисплея значения функции ctg (t) при различных значениях аргумента t.

Код

Аргумента

0

6

4

3

2

Строка меню

ctg(0)

ctg(pi/6)

ctg(pi/4)

ctg(pi/3)

ctg(pi/2)

Выводимая строка

не сущ.

sqrt(3)’

1’

sqrt(3)/3’

0’

10.

Разработать программу, которая выводит на экран дисплея соотношение между старыми русскими мерами длины и современными.

Вид простейшего меню:

введите номер меры длины:

1) миля ‘7,4676 км’

2) верста ‘1,068 км’

3) сажень ‘2,1336 м’

4) аршин ‘0,7112 м’

5) фунт ’30,48 см’

6) дюйм ‘2,54 см’

11.

Разработать программу, которая вычисляет значение одной из заданных функций в указанной точке.

Вид простейшего меню:

введите номер функции:

1) y=x+1

2) y=x*x+1

3) y=x*x*x+1

12.

Разработать программу, которая выводит на экран дисплея сообщения о значениях функции при различных значениях аргумента.

Вид простейшего меню:

введите номер функции:

2) y=sin(pi/2)

3) y=sin(pi/3)

4) y=sin(pi/4)

13.

Разработать программу, которая вычисляет число байтов в килобайте, мегабайте и гигабайте (соответственно 210, 220, 230).

Вид простейшего меню:

введите степень двойки:

10) килобайт

20) мегабайт

30) гигабайт

14.

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

Вид простейшего меню:

введите номер приставки:

1) дека 1Е+1

2) гекто 1Е+2

3) кило 1Е+3

6) мега 1Е+6

9) гига 1Е+9

15.

Разработать программу, которая вычисляет значения одной из заданных функций при указанных значениях.

Вид простейшего меню:

введите номер функции:

1) y=x

2) y=x*x

3) y=x*x*x

4) y=x*x*x*x

16.

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

Вид простейшего меню:

введите пункт меню: выводимое значение:

1) деци 1Е-1

2) санти 1Е-2

3) милли 1Е-3

6) микро 1Е-6

9) нано 1Е-9

17.

Разработать программу, которая выводит на экран дисплея значение единицы длины метрической системы, выбранной с помощью простейшего меню.

Вид простейшего меню:

введите пункт меню: выводимое значение:

1) декаметр декаметр = 10 м

2) гектометр гектометр = 100 м

3) километр километр = 1000 м

4) мириаметр мириаметр = 10000 м

5) мегаметр мегаметр = 1000000 м

18.

Разработать программу, которая вычисляет значение одной из заданных функций в указанной точке.

Вид простейшего меню:

введите номер функции:

1) y=1/x

2) y=1/(x*x)

3) y=1/(x*x*x)

19.

Разработать программу, которая выводит на экран дисплея значения функции cos(t) при различных значениях аргумента t.

Код

аргумента

1

2

3

4

5

Строка меню

cos(pi/10)

cos(pi/11)

cos(pi/13)

cos(pi/14)

cos(pi/15)

Выводимая строка

cos pi/10

cos pi/11

cos pi/13

cos pi/14

cos pi/15

20.

Разработать программу, которая вычисляет значение одной из заданных функций в указанной точке.

Вид простейшего меню:

введите номер функции:

1) y=sin(x)

2) y=cos(x)

3) y=tg(x)

4) y=ctg(x)

5) y=1/sin(x)

21.

Разработать программу, которая выводит на экран дисплея значение одной из выбранных единиц веса.

Вид простейшего меню:

введите номер пункта меню: выводимое значение:

1) дециграмм дг = 0,1 г

2) миллиграмм мг = 0,001 г

3) микрограмм мкг = 0,000001 г

4) карат к = 0,2 г

22.

Разработать программу, которая вычисляет значение одной из заданных функций в указанной точке.

Вид простейшего меню:

введите номер функции:

1) y=x

2) y=2*x+1

3) y=3*x2+2*x+1

23.

Разработать программу, которая вычисляет значение стороны правильного n-угольника, вписанного в круг радиусом R.

Вид простейшего меню:

введите номер пункта меню:

3) A3=R*sqrt(3)

4) A4=R*sqrt(2)

5) A5= sqrt((5-sqrt(5)/2)

6) A6=R

24.

Разработать программу, которая вычисляет значение числа Архимеда с помощью различных приближений, используемых в математике.

Вид простейшего меню:

введите номер приближения:

1) pi=sqrt(10) (Китай)

2) pi=((3+10/71)+(3+1/7))/2 (Архимед)

3) pi=3,1415926535… (Транслятор Паскаля)

25.

Разработать программу, которая вычисляет значение одной из заданных функций в указанной точке.

Вид простейшего меню:

введите номер функции:

1) y=sin x

2) y=cos x

3) y=tg x

4) y=ctg x

После выполнения данного практикума студент должен знать:

  • Если в одном условном операторе требуется проверить выполнение нескольких условий, они записываются после ключевого слова if и объединяются с помощью логических операций and, or, xor и not. Получившееся выражение вычисляется в соответствии с приоритетами операций.

  • Если в какой-либо ветви вычислений условного оператора if требуется выполнить более одного оператора, то они объединяются в блок с помощью ключевых слов begin и end.

  • Проверка вещественных величин на равенство опасна.

  • В операторе варианта выражение, стоящее после ключевого слова case, и константы, помечающие ветви, должны быть одного и того же порядкового типа.

  • Рекомендуется всегда описывать в операторе case ветвь else.

  • Оператор case предпочтительнее оператора if в тех случаях, когда количество направлений вычисления в программе больше двух, а выражение, по значению которого производится переход на ту или иную ветвь, имеет порядковый тип. Часто это справедливо даже для двух ветвей, поскольку повышает наглядность программы.

Приложение № 1.

ВЫЧИСЛЕНИЕ ЗНАЧЕНИЯ ФУНКЦИИ

Написать программу, которая по введенному значению аргумента вычисляет значение функции, заданной в виде графика на интервале

[-3, 3]:

Начинать решение даже простейшей задачи необходимо с четкого описания ее исходных данных и результатов. В данном случае это очевидно: исходными данными является вещественное значение аргумента x, который определен на интервале [-3, 3], а результатом – вещественное значение функции y. Поэтому для представления этих величин в программе следует выбирать тип real.

Перед написанием программы следует составить алгоритм ее решения – сначала в общем виде, а затем постепенно детализируя каждый шаг. Такой способ, называемый нисходящей разработкой, позволяет создавать простые по структуре программы. Сначала запишем функцию в виде формул (сделаем математическую постановку задачи):

Далее приведем описание алгоритма в неформальной словесной форме:

  1. Ввести значение аргумента x.

  2. Проверить, принадлежит ли оно области определения функции.

  3. Если не принадлежит, вывести диагностическое сообщение и завершить программу.

  4. Определить, какому интервалу из области определения функции принадлежит введенное значение, и вычислить значение функции y по соответствующей формуле.

  5. Вывести значение y.

Рис. 1.

Структурная схема вычисления значения функции в виде блок-схемы

Опишем четвертый пункт алгоритма более подробно:

  • Если аргумент x принадлежит интервалу [-3; -2), то .

  • Если аргумент x принадлежит интервалу [-2; 0), то .

  • Если аргумент x принадлежит интервалу [0; 1), то .

  • Если аргумент x принадлежит интервалу [1; 3], то .

По такому алгоритму можно практически «один в один» написать программу:

{***************************************************}

{Программа: FUNC. }

{Цель: вычисление значения функции. }

{Программист: Иванов И.И. }

{Дата выполнения: 10 апреля 2006 г. }

{***************************************************}

Program FUNC;

Var X, Y : real;

Begin

Writeln(‘Введите значение аргумента’);

Read(X);

Wriyeln(‘X=’, X);

If (x<-3) or (x>3) then begin

Writeln(‘Значение должно принадлежать интервалу [-3; 3]’);

exit

end;

If x<-2 then y:=-2*x-5;

If (x>=-2) and (x<0) then y:=-sqrt(1-sqr(x+1))-1;

If (x>=0) and (x<1) then y:=x-1;

If x>=1 then y:=sqrt(1-sqr(x-2));

Writeln(‘Для x= ’, x:6:2, ‘значение функции y= ’, y:6:2)

End. {FUNC}

Следует обратить внимание на запись условий, содержащих два сравнения. Начинающие часто записывают такие условия, просто воспроизводя математическую формулу, т.е. как a<x<b. Ошибка состоит в том, что операции отношения являются бинарными, т.е. должны иметь два операнда. И если надо проверить два условия (a<x и x<b), то и операций должно быть две. Поскольку необходимо, чтобы эти условия выполнялись одновременно, они объединены с помощью операции логического умножения И (and), т.е. выражение принимает вид (a<x) and (x<b). Заключать каждое условие в круглые скобки необходимо потому, что логические операции имеют более высокий приоритет, чем операции отношения. При отсутствии скобок сначала будет предпринята попытка выполнить операцию x and x2, что вряд ли соответствует замыслу.

Первый и последний условные операторы записаны без двойных условий, потому что проверка того, что аргумент находится в диапазоне [-3; 3], выполнена раньше. Стандартная процедура exit обеспечивает выход из программной единицы, в которой она записана. Тестовые примеры для этой программы должны включать, по крайней мере, по одному значению аргумента из каждого интервала, а для проверки граничных условий – еще и все точки перегиба.

При работе приведенной выше программы всегда выполняется один за другим все четыре условных оператора, при этом истинным оказывается только одно условное выражение и, соответственно, присваивание значения переменной y выполняется один раз. Запишем условные операторы так, чтобы уменьшить количество проверок:

If x<-2 then y:=-2*x-5

else if x<0 then y:=-sqrt(1-sqr(x+1))-1

else if x<1 then y:=x-1

else y:=sqrt(1-sqr(x-2));

Этот вариант вычисления значения функции иллюстрирует следующая блок-схема:

Рис. 2. Второй вариант вычисления значения функции.

Во втором варианте проверка на принадлежность аргумента очередному интервалу выполняется только в том случае, если x не входит в предыдущий интервал. Программа получилась более компактной, более эффективной, но, возможно, менее наглядной. В отличие от предыдущей версии, порядок следования условных операторов имеет здесь большое значение. Какой же вариант лучше? Для решения данной задачи разница между ними несущественна, но цель состоит в том, чтобы на простых примерах продемонстрировать общие принципы, следование которым позволит впоследствии создавать надежные и красивые программы. Наиболее наглядным является первый вариант программы, поскольку по нему проще проследить логику ее работы.

В современной иерархии критериев качества программы на первом месте стоят надежность, простота поддержки и модификации, а эффективность и компактность отходят на второй план. Поэтому если нет специальных требований к быстродействию, следует выбирать наиболее наглядный вариант.

Приложение № 2.

ВЫСТРЕЛ ПО МИШЕНИ

Дана заштрихованная область и точка с координатами (x, y). Написать программу, определяющую, попадает ли точка в область. Результат вывести в виде текстового сообщения.

Запишем условия попадания точки в область в виде формул. Область можно описать как круг, пересекающийся с треугольником. Точка может попадать либо в круг, либо в треугольник, либо в их общую часть:

Первое условие задает попадание точки в круг, второе – в треугольник. Переменные x и y – вещественного типа. Программа для решения задачи выглядит следующим образом:

{***************************************************}

{Программа: SHOT. }

{Цель: определить попадет ли точка }

{в заштрихованную область. }

{Программист: Иванов И.И. }

{Дата выполнения: 10 апреля 2006 г. }

{***************************************************}

Program SHOT;

Var X, Y : real;

Begin

Writeln(‘Введите значения x и y’);

Read(X, Y);

Wriyeln(‘X=’, X, ‘Y=’, Y);

If (sqr(x)+sqr(y)<=1) or (x<=0) and (y<=0) and (y>=-x-2)

then writeln(‘Точка попадает в область’)

else writeln(‘Точка не попадает в область’);

End. {SHOT}

Приоритет операций отношения самый низкий, поэтому они заключаются в скобки. Три условия попадания точки в треугольник должны выполняться одновременно, поэтому они объединяются с помощью операции and. Ее приоритет выше, чем or, поэтому дополнительных скобок не требуется.

Для удобочитаемости программы можно ставить скобки даже в тех местах, где они не обязательны, например, для визуальной группировки условий.

Приложение № 3.

Написать программу, которая по номеру месяца выводит время года.

Эта программа не нуждается в дополнительных комментариях:

{***************************************************}

{Программа: SEASON. }

{Цель: определение времени года. }

{Программист: Иванов И.И. }

{Дата выполнения: 10 апреля 2006 г. }

{***************************************************}

Program SEASON;

Var month : word;

Begin

Writeln(‘Введите номер месяца’);

Read(month);

Wriyeln(‘X=’, X);

Case month of

1, 2, 12 : writeln(‘ Зима ’);

3 . . 5 : writeln(‘ Весна ‘);

6 . . 8 : writeln(‘ Лето ‘);

9 . . 11: writeln(‘ Осень ‘);

else writeln( ‘ Такие месяцы встречаются редко ‘)

end

End.

Приложение № 4.

Написать программу, реализующую калькулятор на четыре арифметических действия.

Исходными данными для этой программы являются два вещественных операнда и знак операции, представляющий собой символ. Алгоритм работы программы очевиден: в зависимости от значения введенного знака операции выполнить соответствующее действие над операндами:

{***************************************************}

{Программа: CALCULATOR. }

{Программист: Иванов И.И. }

{Дата выполнения: 10 апреля 2006 г. }

{***************************************************}

Program CALCULATOR;

Var A, B, RES : real;

OP : char;

Begin

Writeln(‘Введите первый операнд:’);

Read(A);

Writeln(‘Введите второй операнд: ‘);

Read(B);

Writeln(‘Введите операцию: ‘);

Read(OP);

Case OP of

‘ + ’ : RES := A + B;

‘ – ‘ : RES := A – B;

‘ * ‘ : RES := A * B;

‘ / ‘ : RES := A / B;

else begin

writeln( ‘ Недопустимая операция ‘);

exit

end;

writeln(‘ RES= ‘, RES:6:2)

End.

Следует обратить внимание на то, что если по какой-либо ветви требуется записать не один, а несколько операторов, они заключаются в блок с помощью операторных скобок begin и end.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]