Персональная страничка
| ||
Предыдущий раздел:
Следующий раздел:
Часто требуется подсчитать, сколько раз во время вычислений наступает то или иное событие (выполняется то или иное условие). Для этого вводится вспомогательная переменная, которой в начале присваивается нулевое значение, а после каждого наступления события она увеличивается на единицу.
Пример 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. Вычисление площади сложных фигур методом Монте-Карло.
Метод Монте-Карло позволяет приближенно подсчитать площадь произвольной плоской фигуры. Для этого плоскую фигуру следует поместить внутрь простой, площадь которой легко подсчитать (например, внутрь квадрата). Затем следует случайным образом генерировать координаты точек так, чтобы они с равной вероятностью оказывались в любом месте квадрата. При этом следует подсчитать, какая доля случайных точек окажется внутри фигуры. При достаточно большом числе точек отношение количества точек, попавших внутрь фигуры, к общему количеству будет равно отношению площадей фигуры и квадрата.
Рассчитаем таким способом площадь под кривой графика функции (см. рис.) в диапазоне от 0 до .
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);
Следующий раздел:
Предыдущий раздел:
В примере 2 очень просится флаг вместо счётчика. Ещё там очень имеет смысл break;
С флагом был тот же пример в предыдущем разделе. Напрашивается, на самом деле, не break, а while или repeat, но их еще студенты не знают. break — не хорошо, так как лучше весь контроль за выходом из цикла, если это возможно, держать в одном месте.
Я весь в сомнениях:
а) то ли оставить как есть, но написать, что с флагом лучше;
б) то ли усложнить пример, чтобы счетчик имел какой-то смысл;
в) то ли придумать совсем другой пример;
г) то ли удалить этот на фиг и ничего не вставлять…
Я хотел тебе предложить переформулировать условие, чтобы находить число чётных элементов, ведь это проще всего, но опаздал :)
О, я, еще не изучая, применяла переменную счетчик в предыдущих задачах :) Удобный инструмент.
В задаче по методу Монте-Карло опечатка,
рассчитываем площадь под кривой графика функции y=sin(x) в диапазоне от 0 до pi, а не 2pi, так?
А к какому типу переменных относить счетчик в var?
integer