ПАСКАЛЬ: точка повернення, підстановка аргументів, зберігання змінних
begin
if First then
begin First := false; V := Rand1 end
else V := ( a*V+ c ) mod m;
NextRand := V
end;
Begin First := true
End.
Як бачимо, змінні V та First стали глобальними в модулі і доступними в його підпрограмах, але за його межами їх "не видно". Можна сказати, що їх означення локалізовані в модулі.
Задачі
2. Переробити модуль Randoms так, щоб він задавав породження псевдовипадкової послідовності
а) дійсних чисел з проміжку [0; 1]; б) дійсних чисел з проміжку [c; d].
3. Переробити модуль Randoms так, щоб зовні його можна було використовувати функцію Rand1. Написати програму обчислення середнього арифметичного значення M та дисперсії D псевдовипадкової послідовності дійсних чисел {Xi} з проміжку [0;1]. Дисперсія – це середнє арифметичне квадратів різниць між числами та M:
D = ( ( X1 - M )2 + … + ( XN - M )2 )/N,
де N – загальна кількість елементів. Добрий генератор має давати значення M і D, близькі до 1/2 та 1/12 відповідно. Але не всякий генератор, що дає такі середнє значення та дисперсію, є добрим.
4. Площу S двовимірної геометричної фігури обмежених розмірів можна обчислити в такий спосіб. Розташувати фігуру всередині іншої, площа S2 якої обчислюється досить просто за формулами. Нею, як правило, є прямокутник у декартовій системі координат. Вибрати довільно N точок із другої фігури, указуючи їхні координати, та обчислити кількість K тих із них, що належать першій фігурі. Відношення K/N буде наближенням до S/S2. Координати точок обчислюються за допомогою випадкових чисел, тому цей спосіб називається методом Монте-Карло – за назвою курорту, де грали в рулетку.
Написати програму обчислення за методом Монте-Карло наближення до площі кола, заданого координатами центру та радіусом.
5. Реалізувати генератор псевдовипадкових чисел, оснований на рекурентному співвідношенні Vi=(a*Vi-1+b*Vi-2+c) mod m. Перші два значення V1 і V2 задаються випадково. Параметри підібрати самостійно. Використати генератор в задачах 8.3–8.4.
7. Підпрограми як параметри
У мові Паскаль параметрами підпрограм можуть бути не тільки змінні, але й підпрограми.
Розглянемо приклад. Нам потрібно надрукувати три таблиці значень трьох математичних функцій на заданому відрізку [a; b], де a>0, у точках, розташованих із заданим кроком h. Функції такі: