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

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

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

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

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

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

1. Создайте программу, запрашивающую у пользователя 10 чисел. Если больше 4-х из них окажутся больше 10, выведите сообщение «Караул! Сейчас все взорвется». Иначе сообщите, сколько введенных чисел больше 10, а сколько больше 5.

2. Напишите программу, которая генерирует n случайных чисел, которые могут принимать значения в диапазоне [-1; 2] и подсчитывает, сколько среди них отрицательных.

3. С помощью метода Монте-Карло получите приближенное значение числа \pi. Для этого подсчитайте площадь окружности единичного радиуса.

4. Напишите программу для подсчета числа точек с целочисленными координатами, находящихся внутри круга с центром в начале координат и радиусом 1000.

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

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

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

  1. Таня

    а как задать случайные числа из диапазона [-1; 2] надо самим думать, или есть какой-то способ?

  2. Taras

    Нужно взять стандартный random, который дает числа в диапазоне [0; 1], и преобразовать их в числа в нужном диапазоне.

  3. александр

    помогите, пожалуйста, друзья, непонимаю как сделать эти счётчики… напишите какую нибудь программу наподобе этих. чтою я понять смог

  4. Taras

    А примеры в теоретической части понятны?

  5. оксана

    Здравствуйте, первая задача правильно?


    Был текст программы

  6. Taras

    Правильно, но
    1) Есть лишний begin и end, которые просто так и ничего не делают.
    2) Из невыполнения c>4 следует, что c<=4 и в дополнительной проверке это не нуждается.

  7. оксана

    ага, понятно, тогда наверное так:


    Был текст программы

    Я про рандом чего-то не могу понять как диапазон задать…

  8. Taras

    Первая — правильно. Рандом дает числа в диапазоне [0; 1). А как получить нужный диапазон — надо придумать ))

  9. оксана

    Здравствуйте, проверьте, пожалуйста, вторую:
    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.

  10. Taras

    В целом правильно. Но предполагалось, что случайные числа могут быть нецелые и равномерно распределены в указанном интервале. Сможете такие сгенерировать?

  11. оксана

    тогда наверное вот так:
    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.

  12. Taras

    Теперь совсем правильно.

  13. АленА

    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.

  14. АленА

    Ответ в четвертой задачи:
    785711 точек из 1000000 попало в круг.
    Писала отдельно блок для верхнего полукруга и нижнего полукруга, можно ли так и есть ли способ проще?

  15. АленА

    Нашла проще, объединила блоки, вот:
    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.

  16. АленА

    Кусок программы с if пропал, там y меньше этого выражения под корнем и y больше отрицательного этого же выражения под корнем.

  17. Darkhan

    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}

  18. Alex_Kot

    Что-то не так?
    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.

  19. Alex_Kot

    Что-то не так?
    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.

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