Персональная страничка
Диканева Тараса
Викторовича

Главная \ Преподавательское \ Программирование для начинающих

8. Переменная — счетчик событий

Предыдущий раздел:

Следующий раздел:

8.1. Переменные счетчики

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

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

  Counter:=0; {Обнуляем переменную-счетчик}
  for i:=1 to 10 do
  begin
    readln(x);
    if (x mod 2 = 0)and(x > 0) then
      Counter:=Counter + 1; {При выполнении условия увеличиваем на 1}
  end;
  writeln(Counter);

Пример 2: Пользователь вводит 10 чисел. Проверить, упорядочены ли они по возрастанию.

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

  Counter:=0;
  readln(x);
  for i:=2 to 10 do
  begin
    x2:=x;
    readln(x);
    if x2 > x then
      Counter:=Counter+1;
  end;
  if Counter = 0 then
    writeln('Последовательность упорядочена')
  else
    writeln('Последовательность не упорядочена');

Пример 3. Вычисление площади сложных фигур методом Монте-Карло.

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

Рассчитаем таким способом площадь под кривой графика функции y=\sin(x) (см. рис.) в диапазоне от 0 до 2\pi.

  N:=1000; {Общее количество точек}
  C:=0; {Инициализируем счетчик}
  for i:=1 to N do
  begin
    {Генерируем случайные координаты точки внутри прямоугольника}
    x:=Pi * random;
    y:=random;
    {В случае попадания в область под кривой увеличиваем счетчик}
    if y < sin(x) then
      C:=C+1;
  end;
  {Подсчитываем площадь фигуры}
  S:=Pi * C / N;
  writeln(S);

Следующий раздел:

Предыдущий раздел:

7 комментариев

  1. Илья

    В примере 2 очень просится флаг вместо счётчика. Ещё там очень имеет смысл break;

  2. Taras

    С флагом был тот же пример в предыдущем разделе. Напрашивается, на самом деле, не break, а while или repeat, но их еще студенты не знают. break — не хорошо, так как лучше весь контроль за выходом из цикла, если это возможно, держать в одном месте.

    Я весь в сомнениях:
      а) то ли оставить как есть, но написать, что с флагом лучше;
      б) то ли усложнить пример, чтобы счетчик имел какой-то смысл;
      в) то ли придумать совсем другой пример;
      г) то ли удалить этот на фиг и ничего не вставлять…

  3. Илья

    Я хотел тебе предложить переформулировать условие, чтобы находить число чётных элементов, ведь это проще всего, но опаздал :)

  4. АленА

    О, я, еще не изучая, применяла переменную счетчик в предыдущих задачах :) Удобный инструмент.

  5. АленА

    В задаче по методу Монте-Карло опечатка,
    рассчитываем площадь под кривой графика функции y=sin(x) в диапазоне от 0 до pi, а не 2pi, так?

  6. Анна

    А к какому типу переменных относить счетчик в var?

  7. Taras

    integer

Добавить комментарий