Тема: Стандартные функции и процедуры. Применение в простейших линейных программах 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Тема: Стандартные функции и процедуры. Применение в простейших линейных программах

Поиск

Для решения задач нам понадобятся стандартные функции и процедуры.

Функция – это такая организация преобразования переданного ей значения, при которой это измененное значение передается обратно.

Процедура – это такая организация преобразования переданного ей значения параметра, при которой изменяется значение этого параметра, и, в отличие от функции, не возвращает никакого значения.

Познакомимся с основными, наиболее часто используемыми.

I Арифметические функции

1) Abs(x), где аргумент и результат являются переменными целого или вещественного типа – вычисляет модуль (абсолютную величину) числа х;

2) Cos(x), где аргумент и результат являются переменными вещественного типа – вычисляет косинус х;

3) Sin(x), где аргумент и результат являются переменными вещественного типа – вычисляет синус х;

4) Frac(x), где аргумент и результат являются переменными вещественного типа – выделяет дробную часть числа х;

5) Int(x), где аргумент и результат являются переменными вещественного типа – выделяет целую часть числа х;

 

6) Pi, где результат является переменной вещественного типа – вычисляет значение

7) Random(x), где аргумент и результат являются переменными целого типа – генерирует случайное число в пределах от 0 до х включительно. Если параметр х не задан, то формируется вещественное число от 0 до 1. Перед использованием данной функции нужно инициализировать генератор случайных чисел при помощи процедуры Randomize (см. ниже);

8) Sqr(x), где аргумент и результат являются переменными целого или вещественного типа – вычисляет x2;

 

9) Sqrt(x), где аргумент и результат являются переменными целого или вещественного типа – вычисляет .

II Функции преобразования типов

1) Chr(x), где аргумент типа Byte, а результат типа Char– возвращает символ, у которого код в таблице ASCII равен х;

2) Ord(x), где аргумент может быть любого порядкового типа, а результат типа LongInt – возвращает порядковый номер значения х при начале нумерации с нуля;

3) Round(x), где аргумент вещественного типа, результат типа LongInt – округляет число х до ближайшего целого;

4) Trunc(x), где аргумент вещественного типа, результат типа LongInt – выделяет целую часть числа х.

III Функции для порядковых типов

1) Odd(x), где аргумент типа LongInt, а результат логического типа – определяет, является ли число четным (результат false) или нечетным (результат true);

2) Pred(x), где аргумент и результат любого порядкового типа – получает предшествующее значение;

3) Succ(x), где аргумент и результат любого порядкового типа – получает последующее значение;

4) Upcase(x), где аргумент и результат типа Char – преобразует букву латинского алфавита в соответствующую ей заглавную (буква х может быть как строчной, так и заглавной).

IV Процедуры для порядковых типов

1) Dec(x), где аргумент любого порядкового типа – уменьшает значение переменной х на 1;

2) Dec(x,n), где х любого порядкового типа, а n типа LongInt – уменьшает значение переменной х на n;

3) Inc(x), где аргумент любого порядкового типа – увеличивает значение переменной х на 1;

4) Inc(x,n), где х любого порядкового типа, а n типа LongInt – увеличивает значение переменной х на n;

5) Randomize – инициализирует генератор случайных чисел.

Правила применения функций:

• чтобы воспользоваться функцией, нужно указать ее в правой части оператора присваивания;

• при обращении к функции необходимо в круглых скобках указать ее аргументы;

• в разделе описания переменных правильно указывайте типы переменных, которые хотите употребить в качестве аргумента или результата функции;

• в одном выражении можно обратиться к нескольким функциям.

Правила применения процедур:

• для выполнения процедуры ее надо вызвать в программе в виде оператора;

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

Задача. Найти значения выражений:

a) (1+x)2 b) c) |a+ bx|

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

Теперь уже можно переходить к составлению программы.

Program Primer;

Uses

Crt;

Var

A: word; {так как подкоренное выражение должно быть положительно}

b, x, Rezult: integer;

Begin

ClrScr;

Writeln(‘Введите значения переменных (A-положительно)’);

Write(‘A=’);

Readln(A);

Write(‘b=’);

Readln(b);

Write(‘x=’);

Readln(x);

Result:= sqr(1+x);

Write (‘sqr(1+x)=’, Rezult);

Result:= sqrt((1+A)*5);

Write (‘sqrt((1+A)*5)=’, Rezult);

Result:= abs(A+b*x);

Write (‘abs(A+b*x)=’, Rezult);

Readln;

End.

Задание. Наберите программу, протестируйте, добавьте комментарий, сохраните файл и распечатайте листинг.


 

Занятие IV

Тема: Решение задач

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

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

 

2. По данным сторонам прямоугольника вычислить его периметр (P), площадь (S) и длину диагоналей (D) по формулам:

3. Запросите действительное число и найдите целую часть этого числа и округлите его до ближайшего целого.

4. Найти площадь круга (S) и длину окружности (L) заданного радиуса.

5. Выполнить целочисленное деление натурального числа х на натуральное число у и вывести на экран частное q и остаток r (см. формулы).

6. Составить программу вычисления площади произвольного треугольника, пользуясь любой из известных формул (задав необходимые исходные данные):

7. Вычислить рациональным способом, то есть за минимальное количество операций:

8. Найти значение выражения:

9.Вычислить объем (V) и площадь (S) полной поверхности прямоугольного параллелепипеда по длинам его ребер а, в, с.

V=abc; S=2ab+2bc+2ac

10. По данной высоте Н и диаметру основания D прямого кругового циллиндра вычислить его площадь полной поверхности (S) и объем (V).

11. По известному радиусу вычислите объем и площадь поверхности шара.

12. Составьте программу вычисления длин высот треугольника, у которого длины сторон a, b, c.

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

13. Составьте программу вычисления длин медиан треугольника, у которого длины сторон a, b, c.

Примечание. Медианой называется отрезок, соединяющий любую вершину треугольника с серединой противоположной стороны. Медиану, соединяющую вершину треугольника А с серединой стороны а, можно найти по формуле:

14. Составить программу вычисления давления столба жидкости плотностью высотой H на дно сосуда, пользуясь формулой

15. Составьте программу вычисления силы давления, действующей на пол со стороны стола массой m, если суммарная площадь (S) опоры ножек стола 100 см, пользуясь формулой , где

16. Составьте программу вычисления выталкивающей силы, действующей на тело объемом V, наполовину погруженное в жидкость плотностью p, пользуясь формулой F=pgV.

17. Составьте программу вычисления потенциальной энергии тела массой м на высоте h относительно Земли, пользуясь формулой E=gmh.

18. Составьте программу вычисления механической работы, когда тело равномерно движется под действием приложенной к нему силы, пользуясь формулой A=FS, где F – приложенная сила, а S – пройденный путь.

19. Ввести 4-значное число. Превратить его в 2-значное, отбросив первую и последнюю цифру.

20. С клавиатуры задается число К. Выбросить из записи К цифру, обозначающую сотни. Вывести полученное число на экран.

Приготовьте для проверки файлы и листинги с вашими программами. Будьте готовы ответить на следующие вопросы:

1. Почему при записи формул на Паскале их "вытягивают" в линию? Почему знак умножения всегда выписывают явно?

2) Почему на Паскале аргумент функции всегда записывают в скобках (например, ln(5), а не ln5)

3) Укажите символы, буквы, составные символы:

^, Y, <>, +, *, R, k, $,!, ф

4) Что в списке можно рассматривать как идентификаторы:

FIO, ФИО, 33719, X, Y, >=, $, &, Summa, _ Rezult

5) Какие идентификаторы удобнее использовать и почему:

klass1, Klass _ 1, summadohoda, SummaDohoda, nomerdoma, Nomer _ Doma

6) Найдите в следующем списке зарезервированные слова:

X, Program, Y, Summa, MyMoney, Произведение, Vova, begin, end, if, repeat, Read.

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

• если в программе используется какое-то число,

• если в вычислениях какой-то операнд постоянно меняет свое значение,

• если операнд в выражении хотя бы раз меняет свое значение.

8) Какая структура программы правильна:

a) Program MyProgram; b) Program MyFirst;

Begin Begin

WriteLn(‘Привет!’); X:=Y+100;

End. End.

9) Какой из перечисленных разделов обязателен в программе?

• раздел Var

• раздел Const

• раздел Type

• раздел Begin... End

• раздел Label

10) Для чего используется слово Uses?

11) В разделе процедур и функций описываются только стандартные процедуры?

• да,

• нет, только пользовательские,

• и стандартные, и пользовательские.

12) Найдите ошибки в программах:

a) Program Ошибки1;

Begin

Summa:=6+8;

End;

b) Program Ошибки2;

Begin

Var

X:integer;

X:=6+8;

Write(X);

End;

13) С чего начинается программа?

14) Как описываются переменные?

15) С чего начинается основная программа?

16) Как выглядит оператор вывода? Для чего он служит? Какое существует различие между выводом сообщения и выводом значения переменной? Можно ли с помощью оператора вывода выполнить два действия? Если – да, то какие?

17) Что собой представляет оператор ввода? Для чего он служит? Как можно его использовать, чтобы осуществить задержку экрана?

18) Как происходит присваивание переменной какого-либо значения? Как называется этот оператор?

19) Чем заканчивается программа?

20) Как сохранить программу на диске?

21) Как сохранить программу под другим именем? Зачем это бывает необходимо?

22) Как отрыть новый файл?

23) Как отрыть уже существующий файл?

24) Как выйти из программы?

25) Какие есть способы загрузки программы Турбо Паскаля в оперативную память?

26) Что такое процедура и чем она отличается от процедуры?

27) Что означает понятие "зарезервированное слово"?

28) Какие имена можно использовать в языке TurboPascal?

29) Из каких частей состоит программа, написанная на языке TurboPascal?

30) Для чего необходим в программе раздел описаний?

31) Какие стандартные типы вам известны?

32) Какие типы относятся к порядковым.?

33) В чем различия между данными действительного и целого типов?

34) Назовите функции горячих клавиш F1-F10.

35) С помощью какой клавиши можно выйти в главное меню?


 


Операторы условия и выбора

 

Занятие I

Тема. Разветвляющиеся алгоритмы. Оператор условия If.

Разветвляющиеся алгоритмы

До сих пор Вы использовали линейные алгоритмы, т.е. алгоритмы, в которых все этапы решения задачи выполняются строго последовательно. Сегодня Вы познакомитесь с разветвляющимися алгоритмами.

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

Признаком разветвляющегося алгоритма является наличие операций проверки условия. Различают два вида условий – простые и составные.

Простым условием (отношением) называется выражение, составленное из двух арифметических выражений или двух текстовых величин (иначе их еще называют операндами), связанных одним из знаков:

< - меньше, чем...

> - больше, чем...

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

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

<> - не равно

= - равно

Например, простыми отношениями являются следующие:

x-y>10; k<=sqr(c)+abs(a+b); 9<>11; ‘мама’<>‘папа’.

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

если х=25, у=3, то отношение x-y>10 будет верным, т.к. 25-3>10

если х=5, у=30, то отношение x-y>10 будет неверным, т.к. 5-30<10

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

а) k=5, a=1, b=-3, c=-8

b) k=65, a=10, b=-3, c=2

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

Примечание. Название “булевые” произошло от имени математика Джорджа Буля, разработавшего в XIX веке булевую логику и алгебру логики.

Определение. Переменная, которая может принимать одно из двух значений: True (правда) или False (ложь), называется булевой (логической) переменной. Например,

К:=True;

Flag:=False;

Second:=a+sqr(x)>t

Рассмотрим пример.

Задача. Вычислить значение модуля и квадратного корня из выражения (х-у).

Для решения этой задачи нужны уже знакомые нам стандартные функции нахождения квадратного корня - Sqr и модуля - Abs. Поэтому Вы уже можете записать следующие операторы присваивания:

Koren:=Sqrt(x-y);

Modul:=Abs(x-y).

В этом случае программа будет иметь вид:

Program Znachenia;

Uses

Crt;

Var

x, y: integer;

Koren, Modul: real;

Begin

ClrScr;

write (‘Введите значения переменных х и у через пробел ‘);

read (x, y);

Koren:=Sqrt(x-y);

Modul:=Abs(x-y).

write (‘Значение квадратного корня из выражения (х-у) равно ‘);

write (‘Значение модуля выражения (х-у) равно ‘);

readln;

End.

Казалось бы задача решена. Но мы не учли области допустимых значений для нахождения квадратного корня и модуля. Из курса математики Вы должны знать, что можно найти модуль любого числа, а вот значение подкоренного выражения должно быть неотрицательно (больше или равно нулю).

Поэтому наша программа имеет свою допустимую область исходных данных. Найдем эту область. Для этого запишем неравенство х-у>=0 и решив его получим х>=у. Значит, если пользователем нашей программы будут введены такие числа, что при подстановке значение этого неравенства будет равно True, то квадратный корень из выражения (х-у) извлечь можно. А если значение неравенства будет равно False, то выполнение программы закончится аварийно.

Задание. Наберите текст программы. Протестируйте программу со следующими значениями переменных и сделайте вывод.

а) х=23, у=5; б) х=-5, у=15; в) х=8, у=8.

Каждая программа, насколько это возможно, должна осуществлять контроль за допустимостью величин, участвующих в вычислениях. Здесь мы сталкиваемся с разветвлением нашего алгоритма в зависимости от условия. Для реализации таких условных переходов в языке Паскаль используют операторы If и Else, а также оператор безусловного перехода Goto.

Рассмотрим оператор If.

Для нашей задачи нужно выполить следующий алгоритм:

если х>=у,

то вычислить значение квадратного корня,

иначе выдать на экран сообщение об ошибочном введении данных.

Запишем его с помощью оператора If. Это будет выглядеть так.

if x>=y

Then

Koren:=Sqr(x-y)

Else

write (‘Введены недопустимые значения переменных‘);

Теперь в зависимости от введенных значений переменных х и у, условия могут выполняться или не выполняться.

В общем случае полная форма конструкции условного оператора имеет вид:

if <логическое выражение>

Then

<оператор 1>

Else

<оператор 2>

Условный оператор работает по следующему алгоритму.

Сначала вычисляется значение логического выражения, расположенного за служебным словом IF. Если его результат истина, выполняется <оператор 1>, расположенный после слова THEN, а действия после ELSE пропускаются; если результат ложь, то, наоборот, действия после слова THEN пропускаются, а после ELSE выполняется <оператор 2>.

Управляющая структура if может показаться негибкой, так как выполняемые действия могут быть описаны только одним оператором. Иногда может потребоваться выполнение последовательности операторов. В этом случае хотелось бы заключить всю последовательность в воображаемые скобки. В Паскале предусмотрен этот случай.

Если в качестве оператора должна выполниться серия операторов, то они заключаются в операторные скобки begin-end. Конструкция Begin... End называется составным оператором.

if <логическое выражение>

Then

Begin

оператор 1;

оператор 2;

...

End

Else

Begin

оператор 1;

оператор 2;

...

end;

Определение. Составной оператор - объединение нескольких операторов в одну группу. Группа операторов внутри составного оператора заключается в операторные скобки (begin-end).

begin

оператор 1;

оператор 2;

end;

С учетом полученных знаний преобразуем нашу программу.

Program Znachenia;

Uses

Crt;

Var

x, y: integer;

Koren, Modul: real;

Begin

ClrScr;

write (‘Введите значения переменных х и у через пробел ‘);

read (x, y);

if x>=y

Then

Begin

Koren:=Sqr(x-y)

Modul:=Abs(x-y)

write (‘Значение квадратного корня из выражения (х-у) равно ‘);

write (‘Значение модуля выражения (х-у) равно ‘);

End

Else

write (‘Введены недопустимые значения переменных‘);

readln;

End.

Составным оператором является и такой оператор

begin

S:=0;

end.

Cимвол “;” в данном случае разделяет оператор присваивания S:=0 и пустой оператор.

Пустой оператор не влечет никаких действий и в записи программы никак не обозначается.

Например, составной оператор

begin

end.

включает лишь один пустой оператор.

Если Вы обратили внимание, программа на языке Паскаль всегда содержит один составной оператор – раздел операторов программы.

Внимание! Перед служебным словом Else разделитель (точка с запятой) не ставится.

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

1. Каждое описание переменной и определение константы заканчиваются точкой с запятой.

2. Каждый оператор в теле программы завершается точкой с запятой, если сразу за ним не следуют зарезервированные слова End, Else, Until.

3. После определенных зарезервированных слов, таких, как Then, Else, Var, Const, Begin, никогда не ставится точка с запятой.

Рассмотрим еще один пример.

Задача. Вывести на экран большее из двух данных чисел.

Program Example1;

Var

x, y: integer; {вводимые числа}

Begin

writeln(‘Введите 2 числа ‘); {вводим два целых числа через пробел}

readln(x,y);

if x>y

Then

writeln (x) {если х больше y, то выводим х}

Else

writeln (y) {иначе выводим y}

readln;

End.

Можно также использовать и сокращенную (неполную) форму записи условного оператора. Эта форма используется тогда, когда в случае невыполнения условия ничего делать не надо.

Неполная форма условного оператора имеет следующий вид.

if <логическое выражение>

Then

<оператор>

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

Задача. Составить программу, которая, если введенное число отрицательное меняет его на противоположное.

Program Chisla;

Var

x: integer; {вводимое число}

Begin

writeln(‘Введите число ‘); {вводим целое число}

readln(x);

if x<0

Then

x:=-x;

writeln (x);

readln;

End.

Выберите из предложенного ниже списка задачи для самостоятельного решения.

1. Если целое число М делится нацело на целое число N, то вывести на экран частное от деления, в противном случае вывести сообщение М на N нацело не делится.

2. Запишите условный оператор, в котором значение переменной с вычисляется по формуле a+b, если а – нечетное и a*b, если а – четное.

3. Вычислить значение функции:

4. Написать программу для подсчета суммы только положительных из трех данных чисел.

5. Даны три числа. Написать программу для подсчета количества чисел, равных нулю.

6. Напишите программу, упростив следующий фрагмент программы:

if a>b then c:=1;

if a>b then d:=2;

if a<=b then c:=3;

if a<=b then d:=4.

7. Каким будет значение переменной а после выполнения операторов:

a:=3;

if a<4

then

begin

Inc(a,2);

Inc(a,3);

end;

8. Найти количество положительных (отрицательных) чисел среди четырех целых чисел A, B, C, D.

9. Составьте программу, которая уменьшает первое введенное число в пять раз, если оно больше второго введенного числа по абсолютной величине.

10. Для данного значения X вычислить значение функции, которая определяется следующим образом:

Y=sin(x), если x >=1

Y=cos(x), если x < 1

11. Определить является ли введённое число чётным.

12. Компьютер спрашивает: "Что сегодня нужно всем?" и если получает ответ ЭВМ, то пишет "Ну, конечно ЭВМ!", иначе "Это тоже нужно всем, но нужнее ЭВМ!"

13. Написать программу, по которой компьютер приветствовал бы только своего хозяина, а при попытке ввести какое-либо другое имя спрашивал бы: "А где (например) Вася?"

14. Написать программу, определяющую, есть ли в введенном числе дробная часть.

15. Написать программу, рисующую круг в случае введения пользователем числа 1 и квадрат во всех других случаях.


 

Занятие II

Тема. Логический тип данных. Логические операции not, and, or. Нахождение значений логических выражений. Самостоятельная работа.

Переменные логического типа описываются посредством идентификатора Boolean. Они могут принимать только два значения – False (ложь) и True (истина). Описываются они также в разделе описания переменных.

Var

Flag: Boolean;

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

В языке Турбо Паскаль имеются логические операции, применяемые к переменным логического типа. Это операции not, and, or и хor. В этой теме Вы рассмотрите три логические операции. Обозначения и результаты этих операций приведены в таблице. Рассмотрите ее.

Значения операндов Результат операции
X Y not X X and Y X or Y
False False True False False
False True True False True
True False False False True
True True False True True

Операция not (не) имеет один операнд и образует его логическое отрицание. Результат операции not есть False, если операнд истинен, и True, если операнд имеет значение ложь. Так,

not True a False (неправда есть ложь)

not False a True (неложь есть правда)

Результат операции and (и) есть истина, только если оба ее операнда истинны, и ложь во всех других случаях.

Результат операции or (или) есть истина, если какой-либо из ее операндов истинен, и ложен только тогда, когда оба операнда ложны.

Задание. Попробуйте определить значение булевых операций для высказываний:

1. Школьник на зимних каникулах остается дома или уезжает куда-либо отдыхать.

2. Филипп Киркоров является певцом и комбайнером.

3. Школьниками являются мальчики и девочки.

Придумайте и запишите в тетрадь три подобных высказывания.

Логические операции, операции отношения и арифметические операции часто встречаются в одном выражении. При этом отношения, стоящие слева и справа от знака логической операции, должны быть заключены в скобки, поскольку логические операции имеют более высокий приоритет. Вообще принят следующий приоритет операций:

• not

• and, *, /, div, mod

• or, +, -

• операции отношения.

Примечание. Логическую операцию and еще называют логическим умножением, а логическую операцию or - логическим сложением.

Кроме того, порядок выполнения операций может изменяться скобками. Например, в логическом выражении расставим порядок действий

4 3 2 1

A or B and not (A or B)

Сначала выполняется заключенная в скобки операция or, а затем операции not, and, or. Если подставить вместо переменных А и В значения True и False, то, используя уже рассмотренный порядок действий, получим значение всего выражения равное True.

Задание. Запишите в тетрадь и вычислите значения выражений при a=10, b=20, c=true, d=false:

а) (a>5) and (b>5) and (a<20) and (b<30);

b) not (a<15) or not (b<30);

c) c or d and (b=20);

Внимание! В языке Паскаль нет возможности ввода логических данных с помощью оператора read. Однако предусмотрен вывод значений переменных логического типа с помощью оператора write.

Например, после выполнения оператора write (5>2) на экран будет выведено True.

Самостоятельная работа

Выберите с учителем задание для выполнения самостоятельной работы из ниже предложенных упражнений.

1. Вычислите значения выражения:

а) sqr(x)+sqr(y)<=4 при x=0.3, y=-1.6;

б) k mod 7 = k div5-1 при k=15;

в) odd(trunc(10*p)) при p=0.182;

г) not odd(n) при n=0;

д) t and (p mod 3=0) при t=true, p=101010;

е) (x*y<>0) and (y>x) при x=2, y=1;

ж) (x*y<>0) or (y>x) при x=2, y=1;

з) a or (not b) при a=False, b=True;

2. Записать на Паскале отношение, истинное при выполнении указанного условия и ложное в противном случае:

а) целое k делится на 7;

б) уравнение не имеет вещественных корней;

в) точка (х, у) лежит вне круга радиуса R с центром в точке (1,0);

г) натуральное число N является квадратом натурального числа;

д) 0<x<1;

е) x=max(x,y,z);

ж) (операцию not не использовать)ж

з) хотя бы одна из логических переменных а и b имеет значение True;

и) обе логические переменные а и b имеют значение True.

3. Указать порядок выполнения операций при вычислении выражений:

а) a and b or not c and d;

б) (x>=0) or not c and d.

4. Вычислить следующие выражения при a=True, b=False:

а) a or b and not a;

б) (a or b) and not a;

в) not a and b;

г) not (a and b)

5. Записать на Паскале выражение, истинное при выполнении указанного условия и ложное в противном случае:

а) х принадлежит отрезку [0, 1];

б) х лежит вне отрезка [0, 1];

в)* х принадлежит отрезку [2, 5] или [-1, 1];

г)* х лежит вне отрезков [2, 5] и [-1, 1];

д) каждое из чисел х, у, z положительно;

ж) ни одно из чисел х, у, z не является положительным;

з) только одно из чисел х, у, z положительно;

и) логическая переменная а имеет значение True, логическая переменная b имеет значение False;

к)* год с порядковым номером у является високосным (год високосный, если его номер кратен 4, однако из кратных 100 високосными являются лишь кратные 400, например, 1700, 1800 и 1900 – невисокосные годы, 2000 – високосный).

6. Нарисовать на плоскости (х,у) область, в которой и только в которой истинно указанное выражение:

а)* (y>=x) and (y+x>=0) and (y<=1);

б) (sqr(x)+sqr(y)<1) or (y>0) and (abs(x)<=1);

в) (trunc(y)=0 and (round(x)=0);

г)* (abs(x)<=1)>(abs(y)>=1);

д) (sqr(x)+sqr(y)<=4)=(y<=x).

7) Имеется условный оператор:

if d<>10

then

writeln (‘ура!’)

else

writeln (‘плохо...’)

Можно ли заменить его следующими операторами:

а) if d=10 б) if not (d=10)

then then

writeln (‘ура!’) writeln (‘ура!’)

else else

writeln (‘плохо...’); writeln (‘плохо...’);

 

в) if not (d=10) г) if not (d<>10)

then then

writeln (‘плохо...’) writeln (‘плохо...’)

else else

writeln (‘ура!’); writeln (‘ура!’);

 

8) Какими будут значения переменных j, k после выполнения условного оператора:

if j>k

then

j:=k-2

else

dec (k,2);

если исходные значения переменных равны:

а) j=3, k=5;

b) j=3, k=3;

c) j=3, k=2.

Примечание. В результате выполнения оператора dec (k,2) значение переменной k уменьшается на 2.


 

Занятие III Тема. Вложенные условные операторы. Решение задач. При решении задач часто приходится рассматривать не два, а большее количество вариантов. Это можно реализовать, используя несколько условных операторов. В этом случае после служебных слов Then и Else записывается новый условный оператор. Рассмотрим пример. Задача. Вычислить значение функции: Для решения этой задачи рассмотрим координатную прямую, на которой отметим промежутки, на которые разбиваются все значения переменной х. Начнем записывать условный оператор: если х>0 то вычислить у по формуле у=х-12 иначе Что же должно выполниться в случае иначе? На эту ветку оператора попадают все не положительные значения х. Если бы для этих чисел нужно было бы выполнить один и тот же оператор (или группу операторов), то проблемы бы не стояло. Но нам нужно этот промежуток разделить еще на две части (отрицательные и ноль), и для части выполнить свой оператор. Поэтому ветка Иначе будет содержать еще один условный оператор и наш вложенный условный оператор будет иметь вид: если х>0 то у вычислить по формуле у=х-12 иначе если х=0 то у вычислить по формуле у=5 иначе у вычислить по формуле у=sqr(x); Тогда фрагмент программы для решения этой задачи будет выглядеть так: if х>0 then у:= х-12 else if х=0 then у:= 5 else у:= sqr(x); Итак, когда оператор if появляется внутри другого оператора if, они считаются вложенными. Такое вложение используется для уменьшения числа необходимых проверок. Этот метод часто обеспечивает большую эффективность, однако одновременно он уменьшает наглядность программы. Не рекомендуется использовать более одного-двух уровней вложения if. За вторым уровнем вложения становится трудно восстановить последовательность проверки условий каждым условным оператором. Если часть else используется во вложенных if, то каждое else соответствует тому if, которое ему непосредственно предшествует. Таким образом, при определении последовательности выполнения фрагментов нет двусмысленности. Рассмотрите еще один пример. Задача. Даны целые числа a, b, c. Если a<=b<=c, то все числа заменить их квадратами, усли a>b>c, то каждое число заменить наибольшим из них, в противном случае сменить знак каждого числа. Для решения этой задачи перепишем условие задачи следующим образом: a:=a2, b:=b2, c:=c2, если a<=b<=c b:=a, c:=a, если a>b>c a:=-a, b:=-b, c:=-c, в остальных случаях Программа для решения этой задачи представлена ниже. Program Example3; Var a, b, c: integer; Begin writeln(‘Введите числа a, b, c’); readln(a,b,c); if (a<=b) and (b<=c) then begin a:=sqr(a); b:=sqr(b); c:=sqr(c); end else if (a>b) and (b>c) then begin b:=a; c:=a; end else begin a:=-a; b:=-b; c:=-c; end writeln(a,b,c); readln; End. Задание. Найдите в этой программе (если есть) условный оператор, вложенный условный оператор, составной оператор, булево условие. Внимание! Подчеркнем еще раз один тонкий момент: поскольку каждый из операторов может быть оператором любого типа (в том числе и условным), и в то же время не каждый из "вложенных" условных операторов может иметь часть else, то возникает неоднозначность трактовки условий. Turbo-Pascal решает эту проблему таким радикальным способом: любая встретившаяся часть else соответствует ближайшей к ней части then. I Выберите с учителем задачи для самостоятельного решения из предложенного списка: 1. Найти наибольшее из трех данных чисел. 2. Вывести на экран номер четверти, которой принадлежит точка с координатами (x,y), при условии, что (x<>0) и (y<>0). 3. Даны три различных числа, найти среднее из них. Средним назовем число, которое больше наименьшего из данных чисел, но меньше наибольшего. 4. Составьте программу нахождения произведения двух наибольших из трех введенных с клавиатуры чисел. 5. Запросить стороны треугольника и определить, является ли он разносторонним, равнобедренным или равносторонним. Учесть условие: третья сторона не должна превышать сумму двух других, иначе треугольник не существует. 6. Составьте программу для вычисления выражения а) max (x+y+z,xyz)+3; b) min (x2+y2,y2+z2)-4; Значения переменных x, y, z вводятся с клавиатуры. 7. Составьте программу, в которой из трех введенных с клавиатуры чисел возводятся в квадрат положительные, а отрицательные остаются без изменения.   8. Даны действительные числа a, b, c. Вычислить корни уравнения 9. Найти минимальное из трёх чисел. 10. Составить программу вычисления функции (Sin(x), если х<=a; z= (Cos(x), если a<x<b; (Tg(x), если x>=b. 11. Предложите пользователю ввести число с клавиатуры. Если число равно нулю, выведите слово “ноль”; если число положительное, выведите слово “положительное”; если число отрицательное, выведите слово “отрицательное”. 12. Напечатать программу вывода дней недели по номеру. II Выберите с учителем задачи для самостоятельного решения из предложенного списка: 1. Определить, попадает ли точка "A" с координатами (х,у) внутрь круга радиуса R. Центр круга совпадает с началом координат. 2. Напишите программу "Угадай число". Компьютер "загадывает" число, а пользователь его отгадывает. (random и постепенное угадывание) 3. Найти сумму положительных чисел, больших 20, меньших 100 и кратных 3. 4. Составьте программу для упорядочения трёх чисел a, b, c по возрастанию таким образом, чтобы имени а соответствовало наименьшее число, имени b- среднее, имени с - наибольшее. 5. Запрограммируйте шуточный тест "Проверь свои возможности". Пользователю предлагается ответить на 7 вопросов: 1) Профессор лёг спать в 8 часов, а встал в 9 часов. Сколько часов проспал профессор? (1) 2) На двух руках 10 пальцев. Сколько пальцев на 10?(50) 3) Сколько цифр в дюжине?(2) 4) Сколько нужно сделать запилов, чтобы распилить бревно на 12 частей? (11) 5) Врач сделал три укола в интервале 30 минут. Сколько времени он затратил? (30) 6) Сколько цифр 9 в интервале 1 100? (1) 7) У пастуха было 30 овец. Все кроме одной разбежались. Сколько овец осталось? (1) Оценка ответов пользователя: - если 7 правильных, то печатается "Гений"; - если 6 правильных, то печатается "Эрудит"; - если 5 правильных, то печатается "Нор


Поделиться:


Последнее изменение этой страницы: 2016-12-30; просмотров: 688; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.214 (0.014 с.)