Pascaler
О проекте Теоретический материал Тестирование Архив задач
Войти в личный кабинет



О проекте


Преподавателям


Тема: Вложенные условные операторы. Решение задач.

При решении задач часто приходится рассматривать не два, а большее количество вариантов. Это можно реализовать, используя несколько условных операторов. В этом случае после служебных слов 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. Составить программу вычисления функции


  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 правильных, то печатается "Нормальный";
    - если 4 правильных, то печатается "Способности средние";
    - если 3 правильных, то печатается "Способности ниже среднего";
    - если <2 правильных, то печатается "Вам надо отдохнуть!".


  6. Cоставить программу для вычисления значения функции
    Z=x3/y, где y=Sin(nx)+0.5.


  7. Составьте программу для упорядочения трех чисел a, b,c по возрастанию таким образом, чтобы имени а соответствовало наименьшее число, имени b - среднее, имени c - наибольшее.


  8. Составить программу, которая запрашивает пароль и выводит сообщение правильно ли он введен.


  9. Напишите программу, которая преобразовывает римские числа в натуральные числа.
    Примечание. Римские числа могут состоять только из символов "X", "V" и "I". Наибольшее число которое может воспринять программа, -это XXXIX, т.е. 39.


  10. Дано действительное число а. Вычислить f(a), если
    а) f(a)=х2 при -2<=х<2,
    f(a)=4 в противном случае;
    б) f(a)=х2+4х+5 при х<=2
    f(a)=1/(х2+4х+5) в противном случае;
    в) f(a)=0 при х<=0,
    f(a)=х при 0<х<=1,
    f(a)=х4 в остальных случаях;
    г) f(a)=0 при х<=0,
    f(a)=х2-х при 0<х<=1,
  11. f(a)=х2-sinПх2 в остальных случаях.

  12. Даны действительные положительные числа a, b, c, d. Выяснить, можно ли прямоугольник со сторонами a и b уместить внутри прямоугольника со сторонами c и d так, чтобы каждая из сторон одного прямоугольника была

    а) параллельна каждой стороне второго прямоугольника;
    б) перпендикулярна каждой стороне второго прямоугольника.

  13. Даны действительные положительные числа a, b, c, х, у. Выяснить, пройдет ли кирпич с ребрами a, b, c в прямоугольное отверстие со сторонами х, у. Просовывать кирпич в отверстие разрешается только так, чтобы каждое из его ребер было параллельно или перпендикулярно каждой из сторон отверстия.


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







Вернуться назад
2003—2012 © Группа «Vimedia»
Проект «Pascaler» — лучший на ХI Всероссийской конференции молодых исследователей с международным участием «Шаг в будущее», Россия, Москва, 12 – 16 апреля 2004г.