Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование. Практикум.doc
Скачиваний:
5
Добавлен:
30.04.2019
Размер:
901.63 Кб
Скачать

2. Проектирование и реализация ветвящегося алгоритма.

Цель

Изучить теоретический материал. Научиться проектировать алгоритм ветвящейся структуры и реализовывать его средствами языка Pascal. Познакомиться с основными принципами написания программ.

Теория.

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

Алгоритмы, имеющие несколько ветвей, называются нелинейными. К таким

относятся разветвляющиеся и циклические алгоритмы. Для их записи применяются составные команды.

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

Структура «ветвление» существует в четырех основных вариантах:

  1. если-то;

  2. если-то-иначе;

  3. выбор;

  4. выбор-иначе.

1. если-то

2. если-то-иначе

3. выбор

4. выбор-иначе

Условный оператор.

  Условный оператор используется для программирования структуры «ветвление», если условие сформулировано как логическое выражение.

IF <логическое выражение> THEN <оператор 1>

[ ELSE <оператор 2>] ; <следующий оператор >;

Оператор выполняется таким образом: если результат вычисления логического выражения TRUE, то выполняется <оператор 1>, затем <следующий оператор >; если – FALSE, то выполняется <оператор 2>, затем <следующий оператор>. Операторы 1 и 2 могут быть простым или составным оператором. Если часть оператора, начинающаяся ELSE, отсутствует, то при логическом выражении равным FALSE, будет выполняться <следующий оператор>. При вложенности условных операторов ELSE всегда относится к ближайшему предшествующему IF. Следует избегать большой глубины вложенности условных операторов, так как при этом теряется наглядность.

Пример использования условного оператора.

IF A > 0 THEN P := P + 1               ELSE  IF A < 0 THEN O := O + 1                  ELSE N := N + 1 ;

...

IF A > 0 THEN                 BEGIN                     S := S + A ;

K := K + 1                 END;

Оператор выбора.

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

CASE <селекторное выражение> OF       <метка>, [<метка>,<метка> . . <метка>] : <оператор 1> ;       <метка>, [<метка>,<метка> . . <метка>] : <оператор 2> ;       . . . . . <метка>, [<метка>,<метка> . . <метка>] : <оператор 2> ; [ ELSE <оператор>] END;

Селекторное выражение (селектор, переключатель) и метки-константы (метки варианта, метки выбора) должны иметь один и тот же простой тип кроме вещественного. Метки-константы в отличие от меток программы не требуется описывать в разделе описания меток. Но на них нельзя ссылаться в операторе GOTO. Метки варианта могут быть перечисляемого и интервального типа.

<оператор 1>,<оператор 2>,<оператор n> - простой или составной оператор.

Оператор выбора выполняется следующим образом. Сначала вычисляется селекторное выражение; затем выполняется оператор, метка варианта которого равна текущему значению селектора; после этого происходит выход из оператора CASE на следующий оператор. Если значение селектора не совпадает ни с одной из меток, варианта будет выполнен оператор после ELSE. Если ветвь ELSE отсутствует, то управление передается на следующий за CASE оператор.

Например,

Z=

cos x, при k=3 sin x, при k=2 ex, при k=1 ln x, при k=0 0, в остальных случаях

… CASE K OF                 0: Z := LN(X) ;                 1: Z := EXP(X) ;                 2: Z := SIN(X) ;                 3: Z := COS(X)             ELSE                 Z := 0                 END ; …

В этом примере результат вычисляется по одной из стандартных функций в зависимости от параметра К, который получает свое значение перед выполнением этого оператора.

В следующем примере переменная OTVET получает значение YES или NO в зависимости от введенного значения символьной переменной V. Здесь метки варианта задаются перечислением.

            … VAR V : CHAR;                     OTVET : STRING;                     …                  

                    CASE V OF ‘D’, ‘d’, ‘Д’, ‘д’ : OTVET := ‘YES’;                         ‘N’, ‘n’, ‘Н’, ‘н’ : OTVET := ‘NO’                     ELSE                         OTVET := ‘ ‘                     END; … 

В следующем примере метки выбора заданы интервалом.

… VAR V : CHAR;     OTVET : STRING;     …

CASE V OF        ‘A’ . . ‘Z’,’a’ . . ‘z’ : OTVET := ‘буква’;        ‘0’ . . ‘9’ : OTVET := ‘цифра’     ELSE OTVET := ‘специальный символ‘ END; …

Правила формирования логических выражений

Логическое выражение, которое используется в условном операторе, может быть простым, например a>0 или x=y. При различных значениях переменных логическое выражение будет выполняться или не выполняться.

Используя аппарат математической логики, можно составлять более сложные логические выражения. Для этого понадобится понимание трех базовых логических функций:

1. NOT – отрицание выраения. Возвращает истину, если выражение ложно и наоборот. Пример использования: логическое выражение «переменная а не больше b» может быть сформировано так a<=b или с использованием отрицания not (a>b).

2. OR – логическое сложение двух выражений. Возвращает истину если хотя бы одно из выражений истинно. Пример использования: логическое выражение «переменная а больше нуля или переменная b больше нуля» может быть сформировано так: ((a>0) or (b>0))

2. AND – логическое умножение двух выражений. Возвращает истину если оба выражения истинны. Пример использования: логическое выражение «переменная а больше нуля и переменная b больше нуля» может быть сформировано так:

((a>0) and (b>0))

Используя скобки для установления порядка операций, с помощью этих трех функций можно составлять логические выражения любой сложности. Например, условие «a > b > c» выглядит так: ((a>b) and (b>c))

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

Задачи А.

1. Даны действительные числа х, у (х¹y). Меньшее из этих двух чисел заменить их полусуммой, а большее— их удвоенным произведением.

2. Даны действительные числа х, у. Если х и у отрицательны, то каждое значение заменить его модулем; если отрицательно только одно из них, то оба значения увеличить на 0.5; если оба значения неотрицательны и ни одно из них не принадлежит отрезку [0,5; 2,0], то оба значения уменьшить в 10 раз; в остальных случаях х и у оставить без изменения.

3. Даны действительные положительные числа х, у, z. Выяснить, существует ли треугольник с. длинами сторон х, у, z.

4. Дано действительное число h. Выяснить, имеет ли уравнение ах2 + bx + с=0 действительные корни, если

,b=1,c=1.

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

5. Дано действительное число h. Выяснить, имеет ли уравнение ах2 + bx + с=0 действительные корни, если

,a=1,c=1.

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

6. Даны действительные числа х, у, z. Вычислить mах (х+у+z, xyz).

7. Даны действительные числа х, у, z. Вычислить

min2 (х + у + z/2, xyz) + 1.

8. Даны действительные числа х, у. Вычислить z:

x-y, если x>y,

z =

y-x+1 в противном случае.

9. Даны два действительных числа. Заменить первое число нулем, если оно меньше или равно второму, и оставить числа без изменения в противном случае.

10. Даны действительные числа a, b, c. Проверить, выполняются ли неравенства a< b < с.

11. Даны действительные числа a, b, с. Удвоить эти. числа, если а> b> с, и заменить их абсолютными значениями, если это не так.

12. Даны действительные числа х, у, z. Получить min (х, у, z), mах (х, у, z).

Задачи B.

1. Даны три действительных числа. Выбрать из них те, которые принадлежат интервалу (1, 3).

2. Даны три действительные числа. Возвести в квадрат те из них, значения которых неотрицательны.

3. Если сумма трех попарно различных действительных чисел х, y, z меньше единицы, то наименьшее из этих трех чисел заменить полусуммой двух других; в противном случае заменить меньшее из х и у полусуммой двух оставшихся значений.

4. Даны действительные числа a, b, с, d. Если b£ с£ d, то каждое число заменить наибольшим из них; если а >b > с >d , то числа оставить без изменения; в противном случае все числа заменяются их квадратами.

5. Даны действительные числа а, b, с (0). Выяснить, имеет ли уравнение ах2+bх+с=0 действительные корни. Если действительные корни имеются, то найти их. В противном случае ответом должно служить сообщение, что действительных корней нет.

6. Даны действительные числа а, b, с (a¹0). Полностью исследовать биквадратное уравнение aх4 + bх2 + c=0, т. е. если действительных корней нет, то должно быть выдано сообщение об этом, иначе должны быть выданы два или четыре корня.

7. Дано действительное число a. Для функции f(x),график которой представлен на рисунке, вычислить f(a).

8. Дано действительное число a.Для функции f(x),график которой представлен на рисунке, вычислить f(a).

y=

9. Дано действительное число a.Для функции f(x),график которой представлен на рисунке, вычислить f(a).

10. Дано действительное число a.Для функции f(x),график которой представлен на рисунке, вычислить f(a).

11. Даны действительные числа х, у. Определить, принадлежит ли точка с координатами х, у заштрихованной части плоскости.

12. Даны действительные числа х, у. Определить, принадлежит ли точка с координатами х, у заштрихованной части плоскости.

13. Даны действительные числа х, у. Определить, принадлежит ли точка с координатами х, у заштрихованной части плоскости.

3. Целочисленная арифметика. Целочисленные вычисления

Цель

Изучить понятия целочисленных операций. Научиться использовать аппарат целочисленной арифметики для решения задач, и реализовывать решение средствами языка Pascal.

Теория.

Над целыми операндами можно выполнять следующие арифметические операции: сложение, вычитание, умножение, целочисленное деление, получение остатка от деления. Знаки этих операций:

+ - * div mod

Результат арифметической операции над целыми операндами есть величина целого типа. Результат выполнения операции деления целых величин есть целая часть частного. Результат выполнения операции получения остатка от деления - остаток от деления целых. Например:

17 div 2 = 8, 3 div 5 = 0.

17 mod 2 = 1, 3 mod 5 = 3.

Примером использования целочисленной арифметики может служить классическая задача на определение четности/нечетности числа.

Чтобы определить, является ли число четным, необходимо получить остаток от деления на 2. Если остаток равен 0, значит число четное. В противном случае – нечетное.

program Chet_nechet;

var a: integer;

Begin

Write(‘Введите число ’);

Readln(a);

if (a mod 2 = 0) then Writeln(‘Число ’,a,‘ четное’)

else Writeln(‘Число ’,a,‘ нечетное’);

Readln;

End.

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

Например:

если пользователь вводит число 19212, то программа должна возвратить цифру 2.

Заметим, что цифры слева (в примере это 19) образуют число, равно результату целочисленного деления на 1000 исходного числа. А цифры справа (в примере это 12) образуют число, равное остатку от деления исходного числа на 100.

19212 mod 100 = 12

19212 div 1000 = 19

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

1 способ

(19212 mod 1000) div 100 = 2

--------------------

19212 mod 1000 = 212

212 div 100 = 2

2 способ

(19212 div 100) mod 10 = 2

--------------------

19212 div 100 = 192

192 mod 10 = 2

Задачи типа A.

1. Дано натуральное число п (n£100). Сколько цифр в числе n?

2. Дано натуральное число n (n£9999). Является ли это число палиндромом (перевертышем) с учетом четырех цифр, как, например, числа 2222, 6116, 0440 и т. д.?

3. Дано натуральное число n (n£9999). Верно ли, что это число содержит ровно три одинаковые цифры, как, например, числа 6676, 4544, 0006 и т. д.

4. Дано натуральное число n (n<1000). Верно ли, что все три цифры числа n одинаковы?

5. Дано натуральное число п (п £ 100), определяющее возраст человека (в годах). Дать для этого числа наименования, «год», «года» или «лет»: например, 1 год, 23 года, 45 лет и т. д.

6. Доказать, что любую целочисленную денежную сумму, большую 7 руб., можно выплатить без сдачи трешками и пятерками. Для данного п > 7 найти такие целые неотрицательные а и b, что

3а + 5b =n.

7. Определить, верно ли, что при делении неотрицательного целого числа а на положительное целое число b получается остаток, равный a или b?

8. Дано натуральное число n ( n£99). Выяснить, верно ли, что n2 равно кубу суммы цифр числа n.

9. Дано натуральное число п (n£100). Чему равна сумма его цифр?

10. Дано натуральное число n (n£9999). Верно ли, что все четыре цифры числа различны?

11. Дано натуральное число п (n£100). Получить наибольшую цифру числа n.

12. Дано натуральное число п (n£100). Получить наименьшую цифру числа n.

13. Даны целые числа m, п (0 < m£ 12, 0£ п < 60), указывающие момент времени: «т часов, п минут». Определить наименьшее время (число полных минут), которое должно пройти до того момента, когда часовая и минутная стрелки на циферблате совпадут.

14. Даны целые числа m, п (0 < m£ 12, 0£ п < 60), указывающие момент времени: «т часов, п минут». Определить наименьшее время (число полных минут), которое должно пройти до того момента, когда часовая и минутная стрелки на циферблате расположатся перпендикулярно друг к другу.