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

Egorova1

.pdf
Скачиваний:
36
Добавлен:
14.02.2015
Размер:
1.67 Mб
Скачать

P = G

m1 m2

 

, где G= 6.67 108 см3 /(г c2 ) - гравитационная постоянная.

 

 

 

 

 

 

 

 

 

R2

 

 

N 24.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Вычислить период математического маятника по формуле

T = 2

π

 

l

, где l - длина маятника, g= 9.8 м/ c2 - ускорение силы тяжести.

 

 

 

 

 

 

 

 

g

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

N 25.

 

 

 

 

 

 

Вычислить по закону взаимодействия точечных зарядов (закон Кулона) силу

взаимодействия F:

 

 

 

 

 

А =

 

 

q1 q2

 

 

, где

q ,

q

2

- величины зарядов, e - абсолютная диэлектрическая

 

 

 

 

 

 

 

 

 

 

 

4 π e r 2

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

проницаемость среды, r - расстояние между точечными зарядами.

 

 

 

 

 

 

 

 

 

 

 

N 26.

 

 

 

 

 

 

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

T = 2π

L C , где L - индуктивность контура, C - емкость контура.

 

 

 

 

 

 

 

 

 

 

 

N 27.

 

 

 

 

 

 

Вычислить сопротивление двух параллельно соединенных проводников по формуле

R

n

=

 

R1 R2

, где R , R

2

- сопротивление проводников.

 

 

 

 

 

 

 

 

 

R1 + R2

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

N 28.

Вычислить количество теплоты, выделяемой за время t в проводнике сопротивлением R, через который проходит ток силой I, по формуле

Q = I 2 R t .

N 29.

Вычислить емкость плоского конденсатора по формуле

C = 4eπSd , где S - площадь одной пластины (меньшей, если они равны), d - расстояние

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

N 30.

Вычислить емкость сферического конденсатора по формуле

C =

e

, где a, b - радиусы внутренней и внешней сферы, соответственно, e -

1/ a 1/ b

диэлектрическая проницаемость материала, находящегося между сферами. N 31.

Вычислить общую емкость конденсаторов с емкостями C1 , C2 ,... Cn при параллельном

соединении по формуле

Cпар = C1 + C2 + ... + Cn ,

а также при последовательном соединении по формуле

1

=

1

+

1

+

1

.

 

С

 

С

С

 

 

 

пос

 

 

2

 

С

n

 

 

 

1

 

 

 

 

Вычисления

 

провести для 5 конденсаторов (n=5) с заданными емкостями

C1 , C2 , C3 , C4 , C5 .

1.5КОНТРОЛЬНЫЕ ВОПРОСЫ И ЗАДАНИЯ ПО МОДУЛЮ 1

1.5.1Каковы основные этапы решения задачи на ЭВМ? Дайте характеристику каждого

этапа.

31

1.5.2Что такое структурная схема ? Из каких блоков она строится?

1.5.3Типы вычислительных процессов - дайте характеристику каждому из них.

1.5.4Чем отличается процесс тестирования от процесса отладки?

1.5.5Что такое металингвистические формы Бэкуса-Наура?

1.5.6Что такое синтаксические диаграммы Вирта?

1.5.7Что такое идентификатор ? По каким правилам строится идентификатор в Паскале?

1.5.8Какова общая структура программы на Паскале?

1.5.9Что такое константы и переменные?

1.5.10Каковы основные типы данных в Паскале? Дайте характеристику каждого типа.

1.5.11Как объявляются в программе константы и переменные? Зачем нужно объявлять переменные?

1.5.12Что такое стандартные подпрограммы?

1.5.13Что представляет собой оператор присваивания в Паскале?

1.5.14Какие бывают типы выражений в Паскале? Как определить тип выражения?

1.5.15Простейшие операторы ввода read и readln. Чем readln отличается от read?

1.5.16Простейшие операторы вывода wtite и writeln. Чем writeln отличается от

write?

1.5.17Что такое формат вывода и как он задается?

1.5.18В виде синтаксических диаграмм определите следующие понятия языка Паскаль:

1)цифра;

2)целое число без знака;

3)вещественная константа в естественной форме представления;

4)идентификатор;

5)раздел описания констант;

6)раздел описания переменных;

7)оператор присваивания.

1.5.19Определите тип и значение выражения, укажите порядок выполнения операций в

нем:

а) not a or b=c, при a=true, b=true, c=false; б) sin(5*8 mod 10)+5.

32

2 ОПЕРАТОРЫ УСЛОВНОГО ПЕРЕХОДА

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

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

2.1ТИПЫ ОПЕРАТОРОВ В ПАСКАЛЕ

ВПаскале различают простые и составные операторы.

Оператор, который не содержит в своем составе другого оператора, называется простым. К простым операторам относят, например, оператор присваивания, пустой оператор, оператор перехода и др.

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

Begin

Оператор

End

;

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

Пример. Ниже приведен пример составного оператора, состоящего из двух простых операторов присваивания.

begin x:=x+2; S:=S+x*x

end

Следует обратить внимание на знак ";". Этот знак используется как разделитель между операторами, а не заканчивает оператор (то есть знак ";" не входит в состав оператора). Кроме знака ";", операторы могут разделяться ключевыми словами (например, словом "end") там, где ключевые слова нужны по смыслу программы.

Поэтому если в примере выше после оператора "S:=S+x*x" поставить ";", то будет считаться, что между этим знаком ";" и следующим словом "end" находится пустой оператор (не предусматривающий никаких действий). Нет ничего страшного в появлении в этом месте пустого оператора, но иногда неправильное употребление знака ";" может привести к неприятностям.

Запись вида begin end;

также предусматривает собой пустой оператор.

Составной или пустой оператор может быть использован в любом месте программы, где вообще разрешено использование оператора.

33

2.2 СКАЛЯРНЫЕ ТИПЫ ДАННЫХ

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

Для целых и вещественных чисел это очевидно: 100<1000 , -2.7<4.3 и т.д.

Для логических значений считается, что false предшествует true, то есть false<true. Сложнее с символьными данными. Каждому символу на клавиатуре присвоен код - семизначное двоичное число, и все символы упорядочены по возрастанию этих кодов. Список кодов символов приведен в специальной ASCII-таблице, код символа называется ASCII-кодом. Величины символьного типа сравниваются по своим ASCII-кодам. Отметим, что для символов-букв латинского алфавита и символов-цифр в таблице сохранена их естественная последовательность, то есть они следуют один за другим и их

коды отличаются на 1. Поэтому

'A'<'B'<'C'<...<'Z' и '0'<'1'<...<'9'.

Замечание: символ-цифру нельзя путать с соответствующим числом, то есть символ '1', например, нельзя путать с числом 1 или числом 1.0.

Таким образом, операции сравнения "<", ">", "<=", ">=", "=", "<>" применимы к любым данным скалярного типа.

2.3 ВЫРАЖЕНИЯ БУЛЕВСКОГО ТИПА

Булевские (логические) выражения могут принимать одно из двух значений : true (истина, да), false (ложь, нет).

Простейшее логическое выражение - это просто логическая переменная или логическая константа. Более сложное логическое выражение имеет вид:

A1 OP A2,

где A1,A2 - выражения одного типа (допустимо: одно выражение real, другое - integer); OP - операция отношения (сравнения):

"=" - равно, ">" - больше, "<" - меньше,

">=" - больше или равно, "<=" - меньше или равно, "<>" - не равно.

Правила выполнения операций отношения - см. в разделе 2.2.

Примеры (знак "-->" означает, что выражение слева от этого знака принимает значение, указанное справа от этого знака):

1) 3 < 5

--> true

7.2 > 100 --> false

2) false < true

--> true

false >= true

--> false

3) 'A' < 'B' --> true

'1' > '9'

--> false

Логические выражения (в простейшем случае просто логические переменные и константы) могут быть операндами четырех логических операций not, and, or, xor ; результат этих операций - логического типа. Имеется одна унарная операция not (отрицание "не") и три бинарных операции: and (и), or (или), xor (исключающее или).

34

Правила работы логических операций определяются следующими таблицами истинности ("T" означает true , "F" означает false):

R

 

not R

 

L

 

R

 

L and R

 

L or R

L xor R

 

T

 

F

 

T

 

T

 

T

 

T

F

 

F

 

T

 

T

 

F

 

F

 

T

T

 

 

 

 

 

F

 

T

 

F

 

T

T

 

 

 

 

 

F

 

F

 

F

 

F

F

 

 

Приоритет логических операций выше, чем приоритет операций отношения (см. п.

1.3.1.2).

 

 

 

 

 

 

 

 

 

 

 

Пример. В выражении

" (a < b)

or (b=0) "

скобки необходимы, иначе за счет порядка

выполнения операций выражение " a < b or b = 0 " воспримется как выражение

"( a < ( b or b ) ) = 0 ".

2.4УСЛОВНЫЙ ОПЕРАТОР IF

2.4.1 Описание оператора IF

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

Общий вид оператора IF: IF L then S1 else S2,

где L - логическое выражение,

S1, S2 - оператор (простой, пустой или составной),

IF, then, else - ключевые слова ( "if" - если, "then" - тогда, "else" - иначе).

Оператор реализует следующий алгоритм.

 

 

 

 

 

 

 

 

 

Вычисляется значение выражения L. Если L -

 

T

L

 

F

 

 

"истина" (true), то выполняется оператор S1,

 

 

 

 

если L - "ложь" (false0), то выполняется

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

оператор S2. Затем в обоих случаях управление

 

 

 

 

 

 

 

 

 

передается следующему за IF оператору.

S1

 

 

 

 

S2

 

 

 

 

 

Замечание. Перед ключевым словом ELSE нельзя ставить ";".

Пример 1. Рассмотрим фрагмент программы, состоящий из двух операторов: оператора

if и следующего за ним оператора присваивания.

 

 

 

 

if a<>0 then b:=1/a else b:=0; c:=y+b;

 

 

 

Этот фрагмент программы реализует следующий алгоритм.

 

 

 

 

 

 

Если a<>0, то переменной b присваивается

 

T

a<>0

F

 

значение 1/a,

затем

выполняется следующий

 

 

 

 

 

оператор c:=y+b.

 

 

 

 

 

 

Если

a=0,

то переменной b присваивается

 

 

 

 

 

значение

0,

затем

выполняется следующий

 

b = 1/a

 

 

b = 0

 

 

 

оператор c:=y+b.

 

 

 

 

 

 

 

C = y + b

Оператор по любой из ветвей оператора IF может отсутствовать. В этом случае рекомендуется так формулировать условие L, чтобы отсутствовала ветвь разветвления по

35

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

IF L THEN S1 ,

где L - логическое выражение, S1 - оператор.

T

 

 

Если L - "истина", то выполняется оператор

L

F

S1; если L - "ложь", то управление сразу

 

 

 

передается следующему за IF оператору.

 

 

 

 

S1

 

 

 

Пример 2. Рассмотрим фрагмент программы, состоящий из двух операторов: if a<>0 then b:=x/a; c:=y+b;

Этот фрагмент программы реализует следующий алгоритм.

T

 

F

Если a<>0, то переменной b присваивается

a<>0

значение

x/a, затем выполняется следующий

 

 

 

оператор

c:=y+b. Если a=0, то сразу

 

 

 

выполняется следующий за if оператор c:=y+b.

b = x/a

 

 

 

 

C = y + b

Пример 3. Рассмотрим фрагмент программы, в котором в операторе if отсутствует оператор по ветви then (то есть оператор S1 - пустой):

T x 0 F if x>=0 then else x:=-x; y:=sqrt(x);

x = -x

y =x

Такая запись возможно, но рекомендуется так изменить условие, чтобы отсутствовал оператор по ветви else, а не по ветви then. Тогда получим сокращенную форму оператора if. В нашем случае:

T

x < 0

F

if x<0 then x:=-x;

 

 

 

y:=sqrt(x);

x = -x

y =x

Пример 4. Рассмотрим фрагмент программы, в котором операторы S1 и S2 по каждой ветви оператора IF - составные операторы. Составные операторы ограничиваются операторными скобками begin end.

if A>B then

36

 

 

 

 

begin

T

 

F

 

y1:=0;

A > B

 

y2:=A;

 

 

 

 

 

 

 

y3:=B

 

 

 

 

end

 

 

 

 

else

y1 = 0

 

y1

= A

 

begin

y2 =A

 

y2

= B

y1:=A;

y3 = B

 

y3

= A+B

y2:=B;

 

 

 

 

y3:=A+B

 

 

 

 

 

 

 

 

end;

Воператоре IF операторы S1 и S2 могут быть любыми операторами, в том числе также операторами IF. В этом случае говорят о вложенной конструкции IF, например:

if L1 then if L2 then S1 else S2;

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

Витоге предыдущая запись трактуется

так:

if L1 then

begin if L2 then S1 else S2 end;

и реализует следующий алгоритм.

T L1 F

T L2 F

S1

 

S2

Для наглядности рекомендуется следующее расположение оператора IF: if <условие> then

<ветвь S1> else

<ветвь S2>

Как видно из этой записи, слова if и else располагаются друг под другом, а операторы S1 и S2 по каждой из ветвей должны быть смещены вправо и находиться также друг под другом.

Пример 5. В приведенном ниже фрагменте программы показано, как рекомендуется располагать отдельные элементы оператора if.

if a<>0 then if b<>0 then

c:=a/b else

c:=0;

k:=1;

Этот фрагмент программы реализует следующий алгоритм: если a<>0, то для b<>0 будет c:=a/b, а для b=0 будет c:=0 ; затем выполняется оператор k:=1 ; если a=0 , то сразу выполняется оператор k:=1.

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

37

вход
ввод х
х 0
вывод y
выход
2.4.2 Примеры разветвляющихся программ c оператором IF
ПРИМЕР 1.
Задание
Написать программу для вычисления значения функции у=|x| при заданном значении x (без использования стандартной функции abs).
Математическая постановка Структурная схема

у =

x

x 0

 

x < 0

 

x

Обозначения

Дано: x - аргумент (real) Результат: y - значение функции (real)

T

y = x

F

y = -x

Замечания по структурной схеме

1.После разветвление ветви "T" и "F" должны обязательно соединиться вместе. Этого требует структура оператора if.

2.В данном случае безразлично, какое условие проверять: "x 0" или "x<0", но в каждом случае по ветвям "T" и "F" будут записаны разные блоки, соответствующие выбранному условию:

T

х 0

F

 

 

T

х < 0

F

 

или

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

y = x

 

y = -x

 

 

y = -x

 

y = x

 

 

 

 

 

 

 

 

3. Структурная схема следующего вида

 

 

 

 

 

 

 

нерациональна,

так как блок

"вывод y"

 

 

 

 

 

 

 

записан дважды:

в конце ветви "F" и в

 

 

 

х 0

 

 

 

 

T

 

F

конце ветви "T". Этот блок выполняется

 

 

 

 

 

 

 

 

 

 

совершенно одинаково в обоих случаях, и

 

 

 

 

 

 

 

его следует вынести за точку

соединения

 

 

 

 

 

 

 

y = x

 

 

y = -x

ветвей, записав в структурной схем один

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

раз

 

 

 

 

 

 

 

 

 

 

 

 

вывод y

 

 

вывод y

38

Программа

program modul (i,o); (*Вычисление модуля X*) var x,y:real;

begin write('ВВЕДИТЕ x: '); readln(x);

if x>=0 then y:=x else y:=-x;

writeln('x=', x:6:2, ' |x|=', y:6:2) end.

Тесты Набор тестов следует составлять таким образом, чтобы проверить все возможные по

алгоритму варианты выполнения программы. В данном случае возможно два варианта: "проход" по ветви "T" и "проход" по ветви "F". Значит, при тестировании программы необходимо проверить оба эти случая (тест для x>0 и для x<0), а также проверить "граничный" случай, когда x=0.

x = -1

y = 1

x = 0

y = 0

x = 1

y = 1

ПРИМЕР 2.

Задание

Написать программу для вычисления значения функции y(x) для любого заданного

значения аргумента x, если

 

 

 

 

 

< Выражение1 >

при 1< x < 2

 

 

 

 

 

y(x) =

 

при 2 x <3

 

 

 

 

 

< Выражение2 >

 

 

Структурная схема

Обозначения

 

 

 

 

 

 

Дано:

x - аргумент (real)

 

 

 

вход

 

Результат:

y - значение функции (real)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ввод х

 

 

 

 

 

 

 

T

1 < х < 3

F

 

 

 

T

х < 2

F

 

 

вывод сообщения

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

об ошибке

 

 

 

 

 

 

 

 

 

 

 

 

y =<Выр.1>

 

 

y = <Выр.2>

 

 

 

 

 

 

 

 

 

 

 

 

вывод y

выход

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

функциональные блоки:

1)ввод значения x;

2)проверка на ошибку ввода;

3)вычисление значения y;

39

4) вывод.

Для этого введем промежуточную величину f - флаг, или признак ошибки (boolean):

true, еслиx ]1,3[ f =

false, если x ]1,3[

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

 

вход

 

 

 

ввод х

 

1.Ввод x

T

1<х <3

F

 

 

 

 

2. Проверка на ошибку

 

 

 

ввода

f = true

 

f = false

 

 

 

 

 

 

T f = true F

 

 

 

3. Вычисление

T

х < 2

F

значения y

 

 

 

 

y = <Выр.1>

 

y = <Выр.2>

 

 

 

 

 

T f = true F

4. Вывод результатов

вывод y

вывод сообщения об

ошибке

 

выход

Программа Составим программу в соответствии с первой структурной схемой для следующего

конкретного примера:

 

2

при 0

< x 1

x

 

y(x) =

 

 

 

 

3

при 1

< x < 3

x

 

program pr2(i,o); (* Вычисление y=f(x) для заданного x *) var x,y:real;

begin

write('Введите x, причем 0<x<3: '); readln(x);

if (x>0)and(x<3) then begin

40

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