La función rand en C

– Prog087

/* Prog087.cpp */

#include <stdio.h>
#include <stdlib.h>
#define num 20
void main()
{
int vect[num];
int i;
char nada[1];
printf(«n Listado de números aleatorios entre 0 y 9 n»); for(i=0;i<num;i++)
{
vect[i]=rand() % 10;
printf(«n %d»,vect[i]);
}
printf(«nn Continuo (s/n) ? «); scanf(«%s»,&nada); if (nada[0]==’n’) return;
printf(«n Listado de números aleatorios entre 0 y 10 n»); for(i=0;i<num;i++)
{
vect[i]=rand() % 11; printf(«n %d»,vect[i]);
}
printf(«nn Continuo (s/n) ? «); scanf(«%s»,&nada); if (nada[0]==’n’) return;
printf(«n Listado de números aleatorios entre 0 y 99 n»); for(i=0;i<num;i++)
{
vect[i]=rand() % 100; printf(«n %d»,vect[i]);
}
printf(«nn Continuo (s/n) ? «); scanf(«%s»,&nada); if (nada[0]==’n’) return;
printf(«n Listado de números aleatorios entre 1 y 6 n»); for(i=0;i<num;i++)
{
vect[i]=(rand() % 6)+1; printf(«n %d»,vect[i]);
}
}

Estudio del PROG087:

– En este programa utilizamos una nueva función: rand(). Dicha función se encuentra en la biblioteca stdlib.h, por esta razón necesitamos escribir la línea:#include <stdlib.h>
– Funcionamiento de la función rand():

rand() % 10: determina un número aleatorio entre 0 y 9 (incluidos los dos):
rand() % 11: determina un número aleatorio entre 0 y 10 (incluidos los dos):
rand() % 100: determina un número aleatorio entre 0 y 99 (incluidos los dos):
(rand() % 6)+1: determina un número aleatorio entre 1 y 6 (incluidos los dos):

– En realidad la función rand() genera números pseudoaleatorios, es decir cada vez que ejecutemos el programa, la sucesión de números “rand” será la misma.
– Si necesitamos “series de rand()” distintas, basta anteponer una línea de contenido srand(semilla), función que también está en stdlib.h, con “semilla” un número entero. Es decir si escribimos srand(1) la serie de números “rand” será distinta si escribimos srand(2). Dicho de otra forma: según el valor de “semilla” obtendremos una serie de números pseudoaleatorios u otra.

Vamos a hacer un programa que ordene un listado de 20 números. – Prog088

/* Prog088.cpp */

#include <stdio.h>
#include <stdlib.h>
void main()
{
int vect[20];
int i,j;
int aux; char
nada[1];
printf(«n Listado de números entre 0 y 100 n»); for(i=0;i<20;i++)
{
vect[i]=rand() % 100;
printf(«n El número %d es %d»,i,vect[i]);
}
printf(«nn Continuo (s/n) ? «); scanf(«%s»,&nada); if (nada[0]==’n’) return;
printf(«n Vamos a ordenar los números»); for(i=0;i<20;i++)
{
printf(«n Determinando el número que debe ocupar el lugar %d»,i);
for(j=i+1;j<20;j++)
{
printf(«.»);
if(vect[j]<vect[i])
{
aux=vect[j];
vect[j]=vect[i];
vect[i]=aux;
}
}
}
printf(«nn    Continuo (s/n) ?  «); scanf(«%s»,&nada);
if (nada[0]==’n’) return;
printf(«nn La lista ordenada es: nn»); for(i=0;i<20;i++)
printf(«El número %d es %d n»,i,vect[i]);
}

Estudio del PROG088:

El problema central es: “dadas 2 variables vect[j], vect[i] cómo intercambiamos sus valores”. Es decir, nos interesa asignar a vect[j] el valor de vect[i] y viceversa.

Observa la solución: aux=vect[j];

vect[j]=vect[i];
vect[i]=aux;

siendo aux una variable auxiliar que hace de puente. x Está claro que con:
if(vect[j]<vect[i])
{
aux=vect[j];
vect[j]=vect[i];
vect[i]=aux;
}

Conseguimos colocar los números menores delante. En definitiva, lo que conseguimos es ordenar los valores del array vect[20]

– Prog089

/* Prog089.cpp */
/* Programa: Multiplicaciones

El programa nos pide ‘¿Cuántas multiplicaciones?’ queremos El programa nos las pregunta aleatoriamente.
Al final, el programa nos da la nota. */
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
void main()
{
int n,a,b,result;
int i;
int bien,mal;
bien=0;mal=0;
printf(«n¿Cuántas Multiplicaciones? «);scanf(«%d»,&n); for (i=1;i<=n;i++)
{
clrscr(); a=rand() % 10; b=rand() % 10;
printf(«%d x %d = «,a,b);scanf(«%d»,&result); if (result==a*b)
{
printf(«n MUY BIEN»); bien=bien+1;
printf(«nnPulsa una tecla para continuar …»); getche();
clrscr();
}
else
{
printf(«n NO ES CORRECTO «);
printf(«n %d x %d = %d «,a,b,a*b); mal=mal+1;
printf(«nn Pulsa una tecla para continuar …»); getche();
clrscr();
};
}
clrscr();
printf(«n Bien = %d Mal = %d»,bien,mal);
printf(«nn NOTA = %d»,int(bien*10/n));
}

Fuente: Programación en C/C++ (Manual FV) de Fermí Vilà