Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Информатика / ИНДИВИД ЗАДАНИЕ ЭКОНОМИСТЫ _Методичка

.pdf
Скачиваний:
16
Добавлен:
12.04.2015
Размер:
659.27 Кб
Скачать

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

Case <выражение> of

<метка варианта 1>:<оператор 1>;

………………………………..

<метка варианта М>:<оператор М>; else <оператор N>;

end;

Замечание. Метка оператора не то же самое, что и метка варианта. Метка варианта может быть любого типа, используемая только в операторе case. Метка оператора, которая используется в опе- раторе goto, может быть только целой и именует только один оператор. Все метки операторов долж- ны быть перечислены в разделе описания меток. Метки варианта нельзя описывать в разделе описа- ния меток.

Например: Составим программу расчета площади треугольника по его трем параметрам, кото- рые могут быть 1) тремя сторонами; 2) двумя сторонами и углом между ними; 3) стороной и двумя прилежащими углами. В каждом случае для расчетов используется своя формула.

Uses crt;

Var a,b,c,s:real; ch:char; Begin Clrscr;

Writeln(‘Расчет площади треугольника’); Writeln(‘Вводи символ:’);

Writeln(‘А, если заданы 3 стороны’); Writeln(‘В, если заданы 2 стороны и угол’); Writeln(‘С, если заданы 2 угла и сторoна’); Readln(ch);

Writeln(‘Введи параметры треугольника’); Write(‘A=‘); readln(A);

Write(‘B=‘); readln(B); Write(‘C=‘); readln(C);

Case ch of

‘A’,’a’: begin p:=(A+B+C)/2;

s:=sqrt(p*(p-a)*(p-b)*(p-c)) end;

‘B’,’b’: s:=1/2*a*b*sin(c*pi/180);

‘C’,’c’: s:=(sqr(a)*sin(b*pi/180)*sin(c*pi/180))/sib(b+c)*pi/180);

еlse writeln(‘Вы выбрали неверный символ’); end;

writeln(‘s=‘, s:6:4);

Еnd.

- 11 -

Образцы решения задач

Пример 1. Рассчитать значение функции при заданном значении аргумента.

ì x + 5, x >10, y = ïíx 2 , 5 < x £10, ïî Sin x, x £ 5.

Решение. Расчет функции у следует производить по следующей схеме:

·Следует ввести значение аргумента х;

·Выбрать для расчета соответствующую формулу;

·Рассчитать значение функции;

·Вывести результат.

Блок схема для решения задачи выглядит следующим образом:

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

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

·Во-вторых, для реализации тройного ветвления, нет необходимости использовать три условных оператора. Наиболее эффективным оказывается применение всего двух условных операторов, один из которых является вложенным в другой. В качестве начального условия для проверки расчета функции можно выбрать любое условие. В нашем примере это условие x >10, если оно выполняется, тогда расчет проводим по формуле y = x+5, если оно не выполняется, тогда для дальнейших вычислений проверяем второе условие (одно любое из оставшихся двух условий). В

нашем примере это условие x > 5, если оно выполняется, тогда расчет проводим по формуле y = x2, если оно не выполняется, тогда расчет выполняем по формуле y = Sin x.

Примечания.

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

- 12 -

2. При записи конструкций алгоритма на языке Паскаль следует строго придерживаться правил синтаксиса алгоритмического языка Паскаль.

а. Выражение записывается в строчку, запрещены над- и подстрочечные символы, а также дроби

типа ab ;

b. Число должно быть записано по правилам синтаксиса;

c. Знак умножения пропускать нельзя (3x+5y → 3*x+5*y).

d. Запрещается ставить рядом 2 и более знака арифметических операций.

e.Запрещается заканчивать запись выражения знаком арифметической операции.

f.Запрещается начинать выражение знаком арифметической операции (кроме “+” и ”-“).

g.Количество открывающих и закрывающих скобок должно соответствовать друг другу.

h.Аргументы у функций заключаются в скобки (sin x → sin(x)).

i.При переносе выражения на новую строчку знак операции не дублируется;

j. Пробелы, концы строк, и комментарии считаются разделителями, их запрещается вставлять в имена, числа, ключевые слова. Там где может находиться хотя бы один разделитель может нахо- диться их любое количество.

При записи выражений также следует учитывать порядок старшинства (приоритет) операций:

1.Вычисления в круглых скобках;

2.Вычисление значений функций;

3.Унарные операции: not (операция отрицания), унарный +, унарный -;

4.Операции типа умножения: *; ÷ ; div; mod; and (логическое умножение).

5.Операции типа сложения :. +; -; or (логическое сложение);

6.Операции отношения: >; > =; <; < =; =; < >; in (проверка принадлежности).

При записи выражений для расчета наших функций используем операцию присваивания и кон- струируем выражения:

- 13 -

Выражение

Конструкция

y = x+5

y:=x + 5

y = x2

y:=x * x или y:= sqr(x)

y = Sin x.

y:= sin(x)

С учетом этих особенностей реализация алгоритма на языке Паскаль выглядит так:

Program TASK (input, output);

{Заголовок программы}

Var x,y: real;

{Описание переменных}

Begin

{Начало программы}

Clrscr:

{Процедура очистки экрана}

Writeln(’Программа расчета функции);

{Вывод пояснений к программе}

Writeln(’Укажите значение аргумента’);

{Организация диалога}

Write(’x = ’); read(x);

{Ввод значения переменной x }

If x > 10 then y:=x + 5 else

{Проверка первого условия с расчетом}

If x > 5 then y:=x * x else y:= sin(x);

{Проверка второго условия с расчетом}

Writeln(’Функция равна, y = ’,y:6:4);

{Вывод результата на экран}

Repeat Until Keypressed;

{Процедура «задержки» экрана }

End.

{Конец программы}

ВАЖНО! Еще раз обратите внимание на правила построения конструкции условного оператора. Внутри его конструкции отсутствуют символы « ; ». Точка с запятой ставится лишь один раз в конце конструкции. Если нарушить это условие, решение перестанет быть верным.

Тема 2.

Операторы циклов.

Краткая теория

ВПаскале существует четыре типа операторов цикла:

1)while (пока) - с предварительной проверкой условия

2)repeat (повторять) - с последующей проверкой условия

3) for-to

формы с параметром

4) for-downto

 

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

- 14 -

Оператор While (оператор с предварительной проверкой условия)

while A do S

(пока) (делать)

А- логическое выражение, S- любой оператор языка Паскаль (тело цикла), НО ТОЛЬКО ОДИН !!!

Оператор цикла в форме while организует выполнение только одного оператора неизвестное заранее число раз. Тело цикла выполняется до тех пор, пока условие верно. Выполнение прекращается если условие стано- вится ложно. Так как истинность условия проверяется в начале, тело цик- ла может не выполняться ни разу. При необходимости выполнения не- скольких действий внутри цикла, следует применять операторные скобки (составной оператор).

Оператор repeat (оператор с последующей проверкой условия)

Общая структура оператора цикла с постусловием имеет вид:

repeat <оператор 1>;<оператор 2>;...<оператор N> until <логическое условие A >;

(повторять) (до)

Оператор цикла repeat организует выполнение нескольких операто- ров неизвестное заранее число раз. Оператор цикла в форме repeat орга- низует выполнение тела цикла до тех пор пока условие А ложно. Выпол- нение тела цикла прекращается, если условие становится истинным. В связи с тем, что условие проверяется последним, тело цикла выполняется хотя бы один раз. В некоторых случаях применять repeat более удобно.

В отличие от оператора цикла while этот оператор цикла всегда вы- полнится хоть один раз.

Операторы цикла с параметром

Конструкции операторов циклов с параметром имеют вид:

For <параметрХ>:=<начальное знач.А1> To <конечное знач.А2> Do

Begin

<оператор 1>; <оператор 2>;

.............

<оператор N>

End;

For <параметр Х>:=<конечное знач.А1> DownTo <начальное знач.А2> Do

Begin

<оператор 1>; <оператор 2>;

.............

<оператор N>

End;

- 15 -

Параметр цикла любая переменная скалярного типа, кроме вещественного типа. В приведенных структурах сразу используется составной оператор (последовательность операторов в операторных скобках), поскольку операторы цикла For организуют выполнение только одного оператора заранее известное число раз. Тело циклов этих операторов выполняется до тех пор, пока параметр цикла не достигает конечного или начального значения, соответственно. Тип начального и конечного значе- ний должен быть таким же, что и у параметра цикла. Эти значения не должны изменяться в процес- се выполнения цикла. Например,

s := 0; p := 1;

For i := 1 To n Do

Begin s:=s+i; p:=p*n

End

Замечание: значение параметров цикла, значения переменных от которых оно зависит не допустимо изменять в теле цикла или в процессе выполнения цикла.

Особенности использования оператора цикла с параметром.

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

в теле цикла запрещено изменять как значения параметра цикла, так и величины от которых зави- сит начальные и конечные значения параметра цикла;

переходить в тело цикла с помощью оператора перехода goto в обход заголовка запрещено. Заго- ловок управляет значением параметра цикла, если использовать оператор goto, то параметр цик- ла остается без текущего значения.

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

Общие правила построения цикла.

Если проанализировать программы, содержащие операторы цикла, то можно выделить три основ- ных момента, из которых складывается выполнение цикла

1.Подготовительные действия. Они состоят в том, что всем величинам, участвующим в цикличе- ских вычислениях приписывают начальные значения;

-16 -

2.Определяется условие завершения цикла (или продолжение цикла в зависимости от формы ис- пользуемого оператора).

3.Четко сформулировать действия, которые должны выполняться в цикле.

Образцы решения задач Пример 2. Рассчитать сумму первых 50 слагаемых в последовательности заданной формулой

50

 

 

1

 

S = å

 

 

, при L = 0,53

i

2

+ L

i =1

 

 

Решение. Расчет суммы следует производить по следующей схеме:

Следует ввести значение числа слагаемых суммы n;

Выбрать для расчета соответствующий оператор цикла (Поскольку число слагаемых заранее известно, можно воспользоваться оператором цикла с параметром);

Определить условия продолжения (или завершения) действия оператора цикла. В нашем примере это будет условие достижения параметром цикла своего конечного значения, опре- деляемого числом слагаемых в сумме;

Занулить начальное значение суммы;

Сформировать тело цикла для расчета суммы, в котором будет осуществляться вычисление слагаемых и добавление их к сумме;

Вывести результат на экран.

Блок схема для решения задачи выглядит следующим образом:

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

Во-первых, все переменные должны быть описаны. Поэтому в разделе описаний переменных введем переменные i в качестве параметра цикла, n в качестве числа слагаемых суммы, цело- го типа, и переменную S для расчета накапливаемой суммы, вещественного типа. Параметр L опишем как константу в разделе описания констант. Заметим, что пользователь программы будет вводить только значение числа слагаемых.

Во-вторых, в силу особенностей оператора цикла с параметром, следует учесть, что действия

и

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

- 17 -

В-третьих, анализ общей формулы, задающей каждое слагаемое в сумме, позволяет провести

его вычисление стандартными средствами языка Паскаль

S:=S+1/(sqr(i) + L),

при этом, расчет слагаемого и добавление его в сумму можно совместить в одном действии, не при- бегая к использованию дополнительных переменных. Однако перед началом цикла переменную S следует занулить. При входе в тело цикла в этом случае начальное значение суммы будет равно ну- лю, при выполнении первого шага оператора цикла с параметром значение переменной S изменится. К «старому» значению - ноль будет давлено рассчитанное значение, соответствующее первому сла- гаемому. На втором шаге, к уже имеющемуся в сумме первому слагаемому будет добавлено значе- ние выражения, соответствующее второму слагаемому суммы. На третьем третье слагаемое, и т.д. до последнего слагаемого, номер которого указан пользователем при помощи переменной n. По за- вершении работы оператора цикла переменная S будет содержать требуемую сумму. Ее необходимо будет вывести на экран и закончит работу программы.

С учетом этих особенностей реализация алгоритма на языке Паскаль выглядит так:

Program primer3 (input, output);

{Заголовок программы}

Const L=0.53;

{Описание параметра - константы}

Var; i, n: integer; s: real;

{Описание переменных}

Begin

{Начало программы}

Clrscr:

{Процедура очистки экрана}

Writeln(’Программа расчета суммы’);

{Вывод пояснений к программе}

Writeln(’Укажите необходимое число слагаемых’);

{Организация диалога}

Write(’n = ’); read(n);

{Ввод значения переменной n }

S:= 0;

{Установка начального значения }

For i:=1 to n do

{Заголовок цикла }

S:=S+1/(sqr(i)+L);

{Расчет слагаемого и добавление его к сумме }

Writeln(’Сумма равна, S = ’,S:6:4);

{Вывод результата на экран}

Repeat Until Keypressed;

{Процедура «задержки» экрана }

End.

{Конец программы}

Пример 3. Составить программу вывода таблицы функции y(x)=x(1+ex2 ) на отрезке [a,b] с шагом h

Решение.

Решение задачи следует производить по следующей схеме:

Следует ввести значения начала и конца отрезка табулирования и шаг табуляции функции;

Взять в качестве начального значения аргумента x значение начала отрезка табулирования;

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

Блок схема для решения задачи выглядит следующим образом:

- 18 -

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

Во-первых, все переменные должны быть описаны. Поэтому в разделе описаний переменных введем переменные a в качестве начала отрезка табулирования, b в качестве конца отрезка табулирования, h в качестве шага табулирования, x в качестве независимого аргумента, y

в качестве рассчитываемой функции. Все переменные вещественного типа.

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

Заметим, что использование для данной задачи оператора цикла с параметром в принципе возможно, но неудобно, поскольку шаг табуляции вещественный, а оператор цикла с параметром может использовать только произвольный простой скалярный тип данных, кроме вещественного. В этом случае задачу можно решить, если определить, сколько шагов придется сделать, чтобы «накрыть» интервал табулирования. Для этого придется определить протяженность интервала табулирования и разделить его на величину шага, затем организовать вычисления с помощью дополнительной переменной. Этот вариант решения в силу его малой эффективности здесь не рассматривается.

В-третьих, перед использованием оператора цикла необходимо будет приписать всем перемен- ным, участвующим в циклических вычислениях некие начальные значения. Переменная x до на- чала цикла должна получить свое первое значение равное a (значение, соответствующее началу отрезка табулирования).

В-четвертых, поскольку при организации цикла с пред- или постусловием перебор параметров цикла (переменная x) следует производить программным образом, в теле цикла должен присут-

ствовать оператор, обеспечивающий переход к следующему значению параметра цикла с учетом

шага табулирования

x := x + h.

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

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

- 19 -

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

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

В-седьмых, вывод рассчитанных значений на экран должен осуществляться до изменения ар- гумента x, в противном случае будет нарушено соответствие, между аргументом и значением

функции.

Сучетом этих особенностей реализация алгоритма на языке Паскаль выглядит так:

Сиспользованием цикла с предусловием:

program primer1 (input, output);

 

{Заголовок программы}

uses crt;

 

{Подключение модуля}

var a,b,x,y,h: real;

 

{Описание переменных}

begin

 

{Начало программы}

clrsсr;

 

{Процедура очистки экрана}

write (‘Введи начальные данные’);

{Вывод пояснений к программе}

write (‘Введи начало отрезка a=‘); readln(а);

{Ввод начала отрезка табулирования }

write (‘Введи конец отрезка b=‘);

readln(b);

{Ввод конца отрезка табулирования }

write (‘Введи h=‘); readln(h);

 

{ Ввод шага табулирования }

x:=a;

 

{Установка начального значения}

while x<=b do

 

{Заголовок цикла}

begin

 

{Открывающая операторная скобка}

y:=x*(1+exp(SQR(x)));

{Расчет значения функции}

writeln(‘при x=‘,x, ‘

y=‘,y);

{Вывод результата на экран}

x:=x+h;

 

{Изменения аргумента}

end;

 

{Закрывающая операторная скобка}

repeat until keypressed;

 

{Процедура «задержки» экрана }

end.

 

{Конец программы}

С использованием цикла с постусловием:

 

program primer1 (input, output);

 

{Заголовок программы}

uses crt;

 

{Подключение модуля}

var a,b,x,y,h: real;

 

{Описание переменных}

begin

 

{Начало программы}

clrsсr;

 

{Процедура очистки экрана}

write (‘Введи начальные данные’);

{Вывод пояснений к программе}

write (‘Введи начало отрезка a=‘); readln(а);

{Ввод начала отрезка табулирования }

write (‘Введи конец отрезка b=‘);

readln(b);

{Ввод конца отрезка табулирования }

write (‘Введи h=‘); readln(h);

 

{ Ввод шага табулирования }

x:=a;

 

{Установка начального значения}

Repeat

 

{Заголовок цикла}

y:=x*(1+exp(SQR(x)));

{Расчет значения функции}

writeln(‘при x=‘,x, ‘

y=‘,y);

{Вывод результата на экран}

x:=x+h;

 

{Изменения аргумента}

until x > b

 

{Проверка условия цикла}

repeat until keypressed;

 

{Процедура «задержки» экрана }

end.

 

{Конец программы}

 

 

- 20 -

Соседние файлы в папке Информатика