Creating, Displaying and Returning Random Numbers

I need catch the numbers of function numerosR by separately because them I need know the major number, minor number and average of all numbers, but I don't know

this is my code:

(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)

Upvotes: 1

Views: 88

Answers (1)

ben rudgers
ben rudgers

Reputation: 3669

This code rewrites numerosRandom to separate generation of random numbers from their display. It also returns the random numbers as a list. The beginning of numerosRandom is unchanged.

(define (numerosRandom)

  (define contador 1)

Now circlo only does one thing. It creates a list of random numbers. Now circlo accepts one argument - a list for accumulating random numbers.

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

A new local function print-numerosR displays the random numbers.

  (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)))))

A list of random numbers named numerosR is first generated, then displayed, then returned as a list.

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

Notes

Because the list of random numbers numerosR is the last item evaluated by numerosRandom it is always returned.

It would be a good exercise to eliminate the mutation of contador by passing it as an additional value to circlo.

Upvotes: 1

Related Questions