创建、显示和返回随机数

Creating, Displaying and Returning Random Numbers

我需要分别捕获函数 numerosR 的数量,因为我需要它们 知道主数、次数和所有数的平均值,但我不知道

这是我的代码:

(clear)
(display "Ingrese un Numero entre 10 y 40: ")
(define Numero (read))

; Funcion numerosRamdon genera numeros aleatoreos entre 10 y 150
; agrupados por columnas de 10 numeros

(define (numerosRandom)
  (define contador 1)
  (define contadorColumnas 1)
  (define (ciclo)
    (define numerosR (+ (random 141) 10))
    (if (and (>= Numero 10)
             (<= Numero 40)
             (<= contadorColumnas 10))
        (if (<= contador Numero)
            (begin
              (display numerosR)
              (display #\space)
              (set! contador (+ contador 1))
              (set! contadorColumnas (+ contadorColumnas 1))
              (ciclo)))
        (begin
          (newline)
          (set! contadorColumnas 1)
          (ciclo))))
  (ciclo))

(numerosRandom)

此代码重写 numerosRandom 以将随机数的生成与其显示分开。它还将 returns 随机数作为列表。 numerosRandom开头不变。

(define (numerosRandom)

  (define contador 1)

现在circlo只做一件事。它创建一个随机数列表。现在 circlo 接受一个参数 - 一个用于累积随机数的列表。

  (define (circlo accumulator)
    (define numerosR (+ (random 141) 10))
    (cond 
      ((= contador Numero)
       (reverse accumulator))
      (else
       (set! contador (+ contador 1))
       (circlo (cons numerosR accumulator)))))

新的本地函数 print-numerosR 显示随机数。

  (define (print-numerosR numeros contadorColumnas)
    (cond ((null? numeros) "")
      ((<= contadorColumnas 10)
       (display (car numeros))
       (display #\space)       
       (print-numerosR (cdr numeros)
               (+ contadorColumnas 1)))
      (else
       (newline)
       (display (car numeros))
       (display #\space)
       (print-numerosR (cdr numeros)
               (+ contadorColumnas 1)))))

首先生成名为 numerosR 的随机数列表,然后显示,然后作为列表返回。

  (define numerosR (circlo '()))
  (print-numerosR numerosR 0)
  numerosR)

备注

因为随机数列表 numerosRnumerosRandom 评估的最后一项,它总是被返回。

通过将 contador 的突变作为附加值传递给 circlo.

来消除它是一个很好的练习