Egorova1
.pdfP = G |
m1 m2 |
|
, где G= 6.67 10−8 см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
у = |
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