Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика часть 1.pdf
Скачиваний:
23
Добавлен:
02.05.2015
Размер:
490 Кб
Скачать
☆

сложных логических выражений, а также есть в Паскале оператор выбора из множества альтернатив (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