Персональная страничка
| ||
Предыдущий раздел:
Следующий раздел:
1. Создайте программу, запрашивающую у пользователя 10 чисел. Если больше 4-х из них окажутся больше 10, выведите сообщение «Караул! Сейчас все взорвется». Иначе сообщите, сколько введенных чисел больше 10, а сколько больше 5.
2. Напишите программу, которая генерирует n случайных чисел, которые могут принимать значения в диапазоне [-1; 2] и подсчитывает, сколько среди них отрицательных.
3. С помощью метода Монте-Карло получите приближенное значение числа . Для этого подсчитайте площадь окружности единичного радиуса.
4. Напишите программу для подсчета числа точек с целочисленными координатами, находящихся внутри круга с центром в начале координат и радиусом 1000.
Следующий раздел:
Предыдущий раздел:
а как задать случайные числа из диапазона [-1; 2] надо самим думать, или есть какой-то способ?
Нужно взять стандартный random, который дает числа в диапазоне [0; 1], и преобразовать их в числа в нужном диапазоне.
помогите, пожалуйста, друзья, непонимаю как сделать эти счётчики… напишите какую нибудь программу наподобе этих. чтою я понять смог
А примеры в теоретической части понятны?
Здравствуйте, первая задача правильно?
…
Был текст программы
Правильно, но
1) Есть лишний begin и end, которые просто так и ничего не делают.
2) Из невыполнения c>4 следует, что c<=4 и в дополнительной проверке это не нуждается.
ага, понятно, тогда наверное так:
…
Был текст программы
Я про рандом чего-то не могу понять как диапазон задать…
Первая — правильно. Рандом дает числа в диапазоне [0; 1). А как получить нужный диапазон — надо придумать ))
Здравствуйте, проверьте, пожалуйста, вторую:
var
x,b,n,s: integer;
begin
readln(n);
s:=0;
for b:=1 to n do
begin
x:= random(4)-1;
writeln(x);
if x<0 then
s:=s+1;
end;
writeln('отрицательных ',s);
end.
В целом правильно. Но предполагалось, что случайные числа могут быть нецелые и равномерно распределены в указанном интервале. Сможете такие сгенерировать?
тогда наверное вот так:
var
b,n,s: integer;
x: real;
begin
readln(n);
s:=0;
for b:=1 to n do
begin
x:= (random *3)-1;
writeln(x);
if x<0 then
s:=s+1;
end;
writeln('отрицательных ',s);
end.
Теперь совсем правильно.
Program zadacha_3;
var
i, n, c:integer;
x, y, s:real;
begin
N:=100000; {Общее количество точек}
C:=0;
for i:=1 to N do
begin
x:=(2 * random)-1;
y:=random;
if y < sqrt(1-sqr(x)) then
C:=C+1;
end;
S:=2 * C / N; {площадь полукруга}
S:=2*S; {площадь круга}
writeln(S);
end.
Ответ в четвертой задачи:
785711 точек из 1000000 попало в круг.
Писала отдельно блок для верхнего полукруга и нижнего полукруга, можно ли так и есть ли способ проще?
Нашла проще, объединила блоки, вот:
Program zadacha_4;
const
N = 1000000; {Общее количество точек}
var
i, c, d: int64;
x, y: double;
begin
C:=0;
for i:=1 to N do
begin
x:=(2 * random(1000))-1000;
y:=(2 * random(1000))-1000;
if (y — sqrt(1000000-sqr(x))) then
C:=C+1;
end;
writeln(c, ‘ точек из ‘, n, ‘ попало в круг’);
end.
Кусок программы с if пропал, там y меньше этого выражения под корнем и y больше отрицательного этого же выражения под корнем.
program N8_4;{целочисленные координаты внутри круга}
var
i, k, c:integer;
begin
c:=0;
for i:=-1000 to 1000 do
for k:=-1000 to 1000 do
begin
if sqr(i)+sqr(k)<=sqr(1000) then
c:=c+1;
end;
writeln('c=', c);
end. {ответ:3141549 и без учета граничных точек 3141521}
Что-то не так?
Program Z8_4;
var
x, C: integer;
begin
C:=0;
for x:=-1000 to 1000 do
C:=C+2*trunc(sqrt(sqr(1000)-sqr(x)));
writeln(‘ C=’, C);
end.
Что-то не так?
Program Z8_4;
var
x, C: integer;
begin
C:=0;
for x:=-1000 to 1000 do
C:=C+2*trunc(sqrt(sqr(1000)-sqr(x)));
writeln(‘ C=’, C);
end.