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

сложных логических выражений, а также есть в Паскале оператор выбора из множества альтернатив (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 (a0). Выяснить, имеет ли уравнение ax2+bx+c=0 действительные корни. Если действительные корни имеются, то найти их. В противном случае

ответом должно служить сообщение, что действительных корней нет.

14. Даны действительные числа a, b, c. Выяснить, верно, ли, что a1b2 a2b1 0,0001,и если верно, то найти решение системы

линейных уравнений

a1x+b1y+c1=0 a2x+b2y+c2=0

(при выполнении выписанного неравенства система заведомо совместна и имеет единственное решение).

15. Даны действительные числа а, b, с (a0). Полностью исследовать биквадратное уравнение 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