Случайные числа и символы

Задача

Написать программу, которая генерирует в указанных пользователем границах

  • случайное целое число,
  • случайное вещественное число,
  • случайный символ.

Для каждого из трех случаев пользователь задает свои границы диапазона. Например, если надо получить случайный символ от 'a' до 'f', то вводятся эти символы. Программа должна вывести на экран любой символ алфавита от 'a' до 'f' включительно.

Пояснение к задаче и алгоритм решения

В языках программирования есть функции, генерирующие случайные (псевдослучайные) числа. В одних языках функция генерирует целое число, в других - вещественное, в Pascal, например, и то и другое.

Для того, чтобы получить число в заданных границах, надо вычислить длину диапазона, получить случайное число от 0 до значения длины диапазона, затем прибавить минимум, т.е. смещение от 0. Например, надо получить случайное число от 5 до 100. Длина диапазона равна 100-5=95. Генерируем число от 0 до 95, а затем прибавляем к нему 5. Если будет случайно получен 0, то добавив к нему 5, получим 5 (минимально возможное), если же будет случайно получено число 95, то наше число будет 100 (максимально возможное).

Получение случайного символа аналогично получению целого числа. Добавляется только перевод символов в числа (и наоборот) по таблице кодов символов.

Исходный код на языке программирования Pascal

var
    min_i, max_i, n_i: integer;
    min_f, max_f, n_f: real;
    first_c, last_c: char;
    min_c, max_c, n_c: byte;    
begin
    randomize;
    write('Minimum integer: ');
    readln(min_i);
    write('Maximum integer: ');
    readln(max_i);
    n_i := random(max_i-min_i+1) + min_i;
    writeln(n_i);
 
    write('Minimum float: ');
    readln(min_f);
    write('Maximum float: ');
    readln(max_f);
    n_f := random() * (max_f-min_f) + min_f;
    writeln(n_f:5:2);
 
    write('First char: ');
    readln(first_c);
    write('Last char: ');
    readln(last_c);
    min_c := ord(first_c);
    max_c := ord(last_c);
    n_c := random(max_c-min_c+1) + min_c;
    writeln(chr(n_c));
end.

Пример(ы) выполнения программы на языке Pascal

Minimum integer: -10
Maximum integer: 10
3
Minimum float: 0.5
Maximum float: 1.25
 0.70
First char: a
Last char: f
f

Особенности решения на языке программирования Pascal

Функция random() генерирует целое число, если ей передать параметр-целое. Например, random(10) сгенерирует случайное число от 0 до 9 включительно.

Без параметров random() возвращает вещественное число от 0 до 1.

Команда randomize необходима для того, чтобы при каждом запуске программы генерировались разные случайные числа.

Исходный код на языке программирования C

#include <stdio.h>
#include <stdlib.h>
main() {
    srand(time(NULL));
 
    int n,min,max;    
    scanf("%d%d", &min, &max);    
    n = rand() % (max-min + 1) + min;
    printf("%d\n", n);
 
    float nf,minf,maxf;    
    scanf("%f%f%*c", &minf, &maxf);    
    nf = (float) rand() / RAND_MAX * (maxf - minf) + minf;
    printf("%.3f\n", nf);
 
    char nc,minc,maxc;    
    scanf("%c%*c", &minc);
    scanf("%c%*c", &maxc);
    nc = rand() % (maxc-minc + 1) + minc;
    printf("%c\n", nc);
}

Пример(ы) выполнения программы на языке C

-10
10
0
0.5
1.25
0.618
a
f
a

Особенности решения на языке программирования C

Функция rand() генерирует целое число от 0 до значения константы, содержащейся в одном из заголовочных файлов.

Находят остаток от деления сгенерированного числа на длину диапазона. Получается число от 0 до значения длины диапазона.

Исходный код на языке программирования Python

from random import random
 
m1 = int(input())
m2 = int(input())
n = int(random() * (m2-m1+1)) + m1
print(n)
 
m1 = float(input())
m2 = float(input())
n = random() * (m2-m1) + m1
print(round(n,3))
 
m1 = ord(input())
m2 = ord(input())
n = int(random() * (m2-m1+1)) + m1
print(chr(n))

Пример(ы) выполнения программы на языке Python

-10
10
-2
0.5
1.25
0.904
a
f
e

Исходный код на языке программирования КуМир

алг случайное
  нач
  цел m1, m2, n
  ввод m1, m2
  n := int(rnd(m2-m1+1))+m1
  вывод n, нс
 
  вещ m1f, m2f, nf
  ввод m1f, m2f
  nf := rnd(m2f-m1f)+m1f
  вывод nf, нс
 
  сим m1c, m2c
  ввод m1c, m2c
  m1 := юникод(m1c)
  m2 := юникод(m2c)
  n := int(rnd(m2-m1+1))+m1
  вывод символ2(n), нс
кон

Пример(ы) выполнения программы на языке КуМир

-10 10
-5
0.5 1.25
0.998909
a f
a

Особенности решения задачи в среде КуМир

Функция rnd() генерирует случайное вещественное число от 0 до переданного ей значения.

В КуМире можно преобразовывать символы в коды и наоборот по двум таблицам: Юникод и КОИ-8.

Исходный код на языке программирования Basic

input min
input max
n = int(rand() * (max-min+1)) + min
print n
 
input min
input max
n = rand() * (max-min) + min
print n
 
input min$
input max$
min = asc(min$)
max = asc(max$)
n = int(rand() * (max-min+1)) + min
print chr(n)

Пример(ы) выполнения программы на языке Basic

-10
10
4
0.5
1.25
0.882108
a
f
d

Особенности решения на языке программирования Basic

Функция rand() генерирует случайное вещественное число от 0 до 1.

Тема

Линейные алгоритмы

Уровень сложности

Средний

Дата публикации

Комментарий

Здравствуйте, скопировала ваш файл отладчик выдает ошибку в 4 строке.
Идентификатор time не определен.
Как справится с этой проблемой