- •Текстовый редактор
- •Прогон и отладка программы
- •Справочная служба Турбо Паскаля
- •Строка
- •Строка
- •Задание 2. Разветвления
- •Простейшие циклы
- •Вложенные циклы
- •Примечания
- •Строка
- •Процедуры и функции
- •Процедуры ввода
- •Обозначение
- •Представим определение языка Показушка в расширенной форме Бэкуса-Наура
- •Предложение
- •Синтаксис Паскаля
- •Задание 14
- •Операторы Паскаля
- •Задание 15
- •Новые типы данных. Определение типа. Диапазоны.
сложных логических выражений, а также есть в Паскале оператор выбора из множества альтернатив (Case).
III. Пример трассировки программы с разветвлением.
1Program prim1(input,output);
2Var x,y,z:integer;
3Begin
4Read(x,y);
5If x>y then z:=x+y
6Tlse z:=x-y;
7Write(z)
8End.
Таблица трассировки Входные данные 7 4
Строка |
Ход выполнения |
x |
y |
z |
3 |
вход в Prim1 |
? |
? |
? |
4 |
|
7 |
4 |
|
5 |
(x > z)=True |
|
|
11 |
7 |
вывод: 11 |
|
|
|
8 |
Выход из Prim1 |
|
|
|
Результат 11 Замечание. Поскольку от значения логического выражения
x>y будет зависеть какой выполняется оператор - z:=x+y или z:=x- y, то это выражение и его значение записываются в столбец “ход выполнения”.
В программе переменная z в зависимости от значения выражения x>y может принять только два значения: либо x+y (строка 5), либо x-y (строка 6). Поэтому математическое выражение выдаваемого программой результата как функцию от входных данных можно записать
X+Y, если X>Y;
Z =
X-Y, если X<=Y.
Задание 2. Разветвления
Выполнить трассировку программы для заданных входных данных. Ввести программу в ЭВМ, сравнить результаты трассировки и работы программы. Записать математическое выражение выдаваемого программой результата как функцию от входных данных.
№1.
program prim1(input,output);
var x,y,z:integer; |
|
begin |
|
read(x,y); |
|
if x>y |
|
then z:=x |
|
else z:=y; |
|
writeln(z) |
|
end. |
|
Входные данные |
5 10 |
№2. |
|
program prim1(input,output); |
|
var x,y,z:integer; |
|
begin |
|
read(x,y); |
|
if x<y |
|
then z:=x |
|
else z:=y; |
|
writeln(z) |
|
end. |
|
Входные данные |
7 3 |
13
№3. |
|
read(x,y,z); |
|
program prim1(input,output); |
f:=x*y*z; |
|
|
var x,y,z,f:integer; |
if x+y+z > f then f:=x+y+z; |
||
begin |
|
writeln(f); |
|
read(x,y,z); |
|
end. |
|
if x>y |
|
Входные данные |
13 -5 90 |
then if x>z |
|
№6. |
|
then f:=x |
|
program prim1(input,output); |
|
else f:=z |
|
var x,y,z:integer; |
|
else if y>z |
|
f:real; |
|
then f:=y |
|
begin |
|
else f:=z; |
|
read(x,y,z); |
|
writeln(f); |
|
f:=x*y*z; |
|
end. |
|
if x+y+z/2> f then f:=x+y+z/2; |
|
Входные данные |
5 10 -1 |
f:=sqr(f)+1; |
|
№4. |
|
writeln(f); |
|
program prim1(input,output); |
end. |
|
|
var x,y,z,f:integer; |
Входные данные |
173 25 -90 |
|
begin |
|
№7. |
|
read(x,y,z); |
|
program prim1(input,output); |
|
if x<y |
|
var x,y,z:integer; |
|
then if x<z |
|
begin |
|
then f:=x |
|
read(x,y); |
|
else f:=z |
|
if x>y |
|
else if y<z |
|
then z:=x-y |
|
then f:=y |
|
else z:=y-x+1; |
|
else f:=z; |
|
writeln(z); |
|
writeln(f); |
|
end. |
|
end. |
|
Входные данные |
113 78 |
Входные данные |
75 15 100 |
№8. |
|
№5. |
|
program prim1(input,output); |
|
program prim1(input,output); |
var x,y:integer; |
|
|
var x,y,z,f:integer; |
begin |
|
|
begin |
|
read(x); |
|
14
y:=x; |
|
program prim1(input,output); |
|
if x>=-2 |
|
var x,y:real; |
|
then if x<2 |
|
begin |
|
then y:=sqr(x) |
|
read(x); |
|
else y:=4; |
|
if x<=0 |
|
writeln(y); |
|
then y:=0 |
|
end. |
|
else if x<=1 |
|
Входные данные |
13 |
then y:=sqr(x)-x |
|
№9. |
|
else y:=sqr(x)-10; |
|
program prim1(input,output); |
writeln(y); |
|
|
var x,y:real; |
|
end. |
|
begin |
|
Входные данные |
10 |
read(x); |
|
№12. |
|
y:=sqr(x)*sqr(x); |
|
program prim1(input,output); |
|
if x>=4 |
|
var x,y,f,d:real; |
|
then y:=0 |
|
begin |
|
else if x>0 |
|
read(x,y); |
|
then if x<=1 |
|
if x>y |
|
then y:=x; |
|
then f:=x |
|
writeln(y); |
|
else f:=y; |
|
end. |
|
if x<y |
|
Входные данные0.8 |
|
then d:=x |
|
№10. |
|
else d:=y; |
|
program prim1(input,output); |
f:=d/f; |
|
|
var x,y:real; |
|
writeln(f); |
|
begin |
|
end. |
|
read(x); |
|
Входные данные |
1.8 5 |
if x<=2 |
|
№13. |
|
then y:=sqr(x)+4*x+5 |
program prim1(input,output); |
||
else y:=1/(sqr(x)+4*x+5); |
var x,y,z,f:real; |
|
|
writeln(y); |
|
begin |
|
end. |
|
read(x,y,z); |
|
Входные данные |
1.8 |
f:=x; |
|
№11. |
|
if f<y then f:=y; |
|
15
if f<z then f:=z; |
|
|
writeln(f); |
|
|
end. |
|
|
Входные данные |
1.8 5 |
1 |
№14. |
|
|
program prim1(input,output); |
||
var x,y,z,f:real; |
|
|
begin |
|
|
read(x,y,z); |
|
|
f:=x; |
|
|
if f>y then f:=y; |
|
|
if f>z then f:=z; |
|
|
writeln(f); |
|
|
end. |
|
|
Входные данные |
2 1.8 |
1 |
№15. |
|
|
program prim1(input,output); |
||
var x,y,z,f,d:real; |
|
|
begin |
|
|
read(x,y,z); |
|
|
f:=x; |
|
|
if f<y then f:=y; |
|
|
if f<z then f:=z; |
|
|
if x>y |
|
|
then f:=f*x |
|
|
else f:=f*y; |
|
|
writeln(f); |
|
|
end. |
|
|
Входные данные |
1.8 5 |
-2 |
Занятие 6. Построение программы с разветвлением
I. Пример построения программы с разветвлением:
спецификация таблица разработки {таблица трассировки}.
Задача: Даны целые числа x,y,z,f. Если x<=y<=z<=f, то каждое число заменить наибольшим из них, в противном случае числа оставить без изменения.
Спецификация
1)Даны целые числа x,y,z,f. Составить программу на Паскале, которая заменяет числа x,y,z на число f, если выполняется условие x<=y<=z<=f и оставляет числа без изменения, если это условие не выполняется.
2)Входные данные: четыре целых числа 1 2 3 4.
3)Выходные данные: преобразованные согласно условию задачи четыре целых числа, например, при входных данных 1 2 3 4 результат 4 4 4 4.
Таблица разработки
Шаги разработки |
Примечания |
Work2 |
|
Æ |
|
begin |
|
ввод входных данных |
|
преобразование чисел |
|
вывод результата |
|
end |
|
ввод входных данных |
переменные |
Æ |
x,y,z,f:integer |
read (x,y,z,f) |
|
преобразование чисел |
|
Æ |
|
если выполняется условие x<=y<=z<=f, то |
|
заменить числа x,y,z на число f |
|
если выполняется условие x<=y<=z<=f, то |
|
16
заменить числа x,y,z на число f
Æ
if x<=y then if y<=z then
if z<=f then begin
x:=f; y:=f; z:=f; end;
вывод результата
Æ
write (x,y,z,f)
Work2
Æ
begin
read (x,y,z,f); if x<=y then if y<=z then if z<=f then
begin
x:=f; y:=f; z:=f; end;
write (x,y,z,f) end.
Текст программы
1Program work2;
2var x,y,z,f : integer;
3begin
4read (x,y,z,f);
5if x<=y then
6if y<=z then
7if z<=f then
8begin
9x:=f; y:=f; z:=f;
10end;
11write (x,y,z,f)
12end.
Таблица трассировки
Входные данные 1 2 3 4
Строка |
Ход выполнения |
x |
y |
z |
f |
3 |
вход в work2 |
? |
? |
? |
? |
4 |
|
1 |
2 |
3 |
4 |
5 |
(x<=y) = True |
|
|
|
|
6 |
(y<=z) = True |
|
|
|
|
7 |
(z<=f) =True |
|
|
|
|
8 |
|
|
|
|
|
9 |
|
4 |
4 |
4 |
|
10 |
|
|
|
|
|
11 |
Вывод : 4 4 4 4 |
|
|
|
|
12 |
Выход из work2 |
|
|
|
|
Результат: 4 4 4 4
Замечание. Последовательность операторов x:=f; y:=f; z:=f объединена в составной оператор begin x:=f; y:=f; z:=f end. Если это не сделать, то при любых значениях входных данных переменным y и z присваивалось бы значение переменной f.
Задание 3
Составить подробную спецификацию программы с примерами входных и выходных данных. Разработать программу, используя таблицы разработки. Выполнить трассировку программы. Ввести программу в ЭВМ, сравнить результаты трассировки и работы программы.
17
1.Даны действительные числа х, у, z. Получить: max (x, y, z);
2.Даны действительные числа х, у, z. Получить: max (x+y+z, xyz);
3.Даны действительные числа х, у, z. Получить: min2 (x+y,z/2);
4.Даны действительные числа а, b , с. Проверить, выполняются ли неравенства а < b< с.
5.Даны действительные числа а, b, с. Удвоить эти числа, если a ≥ b ≥ c и заменить их абсолютными значениями, если это не
так.
6.Даны два действительных числа. Заменить первое число нулем, если оно меньше или равно второму, и оставить числа без изменения в противном случае.
7.Даны три действительных числа. Выбрать из них те, которые принадлежат интервалу (1, 3).
8.Даны действительные числа x, y ( x ≠ y ) Меньшее из этих двух
чисел заменить их полусуммой, а большее - их удвоенным произведением.
9.Даны три действительные числа. Возвести в квадрат те из них, значения которых неотрицательны.
10.Если сумма трех попарно различных действительных чисел х, у, z меньше единицы, то наименьшее из этих трех чисел заменить полусуммой двух других; в противном случае заменить меньшее из х и у полусуммой двух оставшихся значений.
11.Даны действительные числа а, b, с, d. Еслиa ≤ b ≤ c ≤ d , то каждое число заменить наибольшим из них; если а>b>c>d, то чиcла оставить без изменения; в противном случае все числа заменяются их квадратами.
12.Даны положительные действительные числа х, у, г.
а) Выяснить, существует ли треугольник с длинами сторон x, y, z. б) Если треугольник существует, то ответить - является ли он остроугольным.
13. Даны действительные числа a, b, c (a≠0). Выяснить, имеет ли уравнение ax2+bx+c=0 действительные корни. Если действительные корни имеются, то найти их. В противном случае
ответом должно служить сообщение, что действительных корней нет.
14. Даны действительные числа a, b, c. Выяснить, верно, ли, что a1b2 −a2b1 ≥ 0,0001,и если верно, то найти решение системы
линейных уравнений
a1x+b1y+c1=0 a2x+b2y+c2=0
(при выполнении выписанного неравенства система заведомо совместна и имеет единственное решение).
15. Даны действительные числа а, b, с (a≠0). Полностью исследовать биквадратное уравнение ax4+ bx2+c=0, т. е. если действительных корней нет, то должно быть выдано сообщение об этом, иначе должны быть выданы два или четыре корня.
16.Даны действительные числа а, b, с, d, s, t, u (s и t одновременно не равны нулю). Известно, что точки (а, b) и (с, d) не лежат на прямой l заданной уравнением sx +ty+u=0. Прямая l разбивает координатную плоскость на две полуплоскости. Выяснить, верно ли, что точки (а, b) и (с, d) принадлежат разным полуплоскостям
*).
17.Даны действительные числа x1, x2, x3, y1, y2, y3. Принадлежит ли начало координат треугольнику с вершинами (x1, y1), (x2, y2), (x3, y3)? **)
18.Даны действительные положительные числа а, b, с, d. Выяснить, можно ли прямоугольник со сторонами а, b уместить внутри прямоугольника со сторонами с, d так, чтобы каждая из сторон одного прямоугольника была параллельна или перпендикулярна каждой стороне второго прямоугольника.
19. Даны действительные положительные числа а, b, с, х, у. Выяснить, пройдет ли кирпич с ребрами а, b, с в прямоугольное отверстие со сторонами х и у. Просовывать кирпич в отверстие разрешается только так, чтобы каждое из его ребер было параллельно или перпендикулярно каждой из сторон отверстия.
18
*) В этой задаче надо воспользоваться тем, что если уравнение F(x,y)=0 определяет прямую или кривую, разбивающую координатную плоскость на две части, то точки (a, b) и (c, d), не лежащие на этой линии, принадлежат одной и той же части, если F(a, b) и F(c,d) – числа одного знака.
**) В этой задаче надо воспользоваться пояснениями *), а также тем, что уравнением прямой, проходящей через две различные точки (e, f) и (g, h), (x-e)(h-f)-(y-f)(g-e)=0
Занятие 7. Простейшие циклы
I. Оператор цикла с предусловием while.
II.Пример трассировки программы с циклом.
I. Цикл (повторение) всегда характеризуется двумя аспектами: во-первых - процессом, который должен повторяться, во-вторых - условием, при котором повторение прекращается.
Общий вид оператора цикла с предусловием while :
while U do S, (пока U (=True) выполнять S)
где while (пока), do (выполнять) - служебные слова, U - логическое выражение, управляющее циклом, S - оператор (тело цикла).
Выполнение:
1)вычисляется значение логического выражения U
2)если U=False, цикл завершается, т.е. оператор S не выполняется, а выполняется оператор, следующий за оператором цикла
3)если U =True, то происходит однократное выполнение S и возврат к пункту 1).
II.Пример трассировки программы с циклом while
1.Program prim2 (input,output);
2.var n,x,i:integer;
3.rez:real;
4.begin
5.read (n,x);
6.i:=1;
7.rez:=0;
8.while i<n do
9.begin
10.rez:=rez+ x*x;
11.i:=i+1;
12.end;
13.write (rez)
14.end.
Таблица трассировки. Входные данные 3 2
Строка |
Ход выполнения |
n |
x |
i |
rez |
4 |
вход в Prim2 |
? |
? |
? |
? |
5 |
|
3 |
2 |
|
|
6 |
|
|
|
1 |
|
7 |
|
|
|
|
0 |
8 |
(i<n)=True |
|
|
|
|
10 |
|
|
|
|
4 |
11 |
|
|
|
2 |
|
8 |
(i<n)=True |
|
|
|
|
10 |
|
|
|
|
8 |
11 |
|
|
|
3 |
|
8 |
(i<n)=False |
|
|
|
|
13 |
Вывод 8 |
|
|
|
|
14 |
Выход из prim2 |
|
|
|
|
Результат: 8 Замечание.
1.Поскольку значение выражения i<n влияет на то, будет ли выполняться оператор цикла или цикл завершится, оно фиксируется в столбце «ход выполнения».
19