25 de Noviembre del 2009
Guardado en: Teoría
Etiquetas: rand
Es algo muy frecuente, cuando ya dominas todo eso de pedir y almacenar datos, ahora tu profesor te pedirá que tus programas generen números aleatorios para automatizar el proceso de llenar arreglos y todo eso.
Así que lo primero que tenemos que hacer es incluir la librería:
#include<stdlib.h>
Luego inicializar los números aleatorios incluyendo esto:
srand(time(NULL));
Luego guardar el número aleatorio en alguna parte:
num=rand();
Eso es básicamente. Para ajustar el rango de número aleatorios podemos hacer varias cosas.
Número aleatorios entre 0 y 50:
num=rand()%51;
Número aleatorios entre 1 y 100:
num=1+rand()%50;
Número aleatorios entre 250 y 420:
num=250+rand()%(420-250);
De forma general es:
variable = limite_inferior + rand() % (limite_superior - limite_inferior) ;
Así que un programa que muestre 10 números aleatorios entre 1 y 10 quedaría así:
#include<stdlib.h>
#include<iostream>
using namespace std;
int main()
{
int num,c;
srand(time(NULL));
for(c=1;c<=10;c++)
{
num=1+rand()%(10-1);
cout<<num<<" ";
}
cin.get();
}
Sin comentarios
Bueno, tal vez el título quedó muy poco descriptivo, pero la idea es pedir un número de personas, luego se le pediría a cada persona su peso pero nosotros solo vamos a generar un número aleatorio en determinado rango. Luego se clasificaría a esas personas en rangos de peso y al final mostrar una tabla que muestre la frecuencia de cada rango con asteriscos, así:
51-60 ***
61-70 **
71-80 ***
80-91 *
91-mas *****
El código en C++ sería así:
#include<stdlib.h>
#include<iostream>
using namespace std;
int main()
{
int n,c,c2,peso[500],cat[5]={0},lim;
// n -> numero de personas
// c y c2 para ciclos
// peso[500] arreglo para guardar el peso de las personas
// cat[5] arreglo para guardar el número de personas en cada categoria de peso
srand(time(NULL)); // Inicializa los números aleatorios
cout<<"Introduce el número de personas: ";cin>>n;
for(c=0;c<=n-1;c++)
{
peso[c]=51+rand()%(120-51); //guarda un número aleatorio del 51 al 120 en cada elemento del arreglo
// según su valor se aumenta un elemento de nuestro otro arreglo
if(peso[c]>50 && peso[c]<=60)
cat[0]++;
if(peso[c]>60 && peso[c]<=70)
cat[1]++;
if(peso[c]>70 && peso[c]<=80)
cat[2]++;
if(peso[c]>80 && peso[c]<=90)
cat[3]++;
if(peso[c]>90)
cat[4]++;
}
cout<<"\n";
for(c=0;c<=4;c++)
{
switch(c)
{
// segun cada caso imprime algo diferente
case 0:
cout<<"51-60\t";
break;
case 1:
cout<<"61-70\t";
break;
case 2:
cout<<"71-80\t";
break;
case 3:
cout<<"81-90\t";
break;
case 4:
cout<<"90- \t";
break;
}
lim=cat[c]; // no podemos usar un arreglo como limite del ciclo (la verdad
// no se porque), entonces lo pasamos a una variable normal
for(c2=1;c2<=lim;c2++)
cout<<"*";
cout<<"\n\n";
}
cin.get();cin.get(); // detiene la ejecución al final (es como getch();)
}
A propósito, este programa fue una petición especial de un usuario.
Sin comentarios
Lo primero que tendríamos que hacer sería quitar los espacios de nuestra cadena. Luego ir comparando, el primer caracter con el último, el segundo con el penúltimo, etc. Si todos los caracteres coinciden, es palíndromo, si no, pues no.
#include<string.h>
#include<iostream>
using namespace std;
int main()
{
char cadena[50],cadenaf[50]={0},*parte;
int c,len,pal=0;
cout<<"Introduce un palíndromo: "; cin.getline(cadena,50,'\n');
parte=strtok(cadena," "); //
strcat(cadenaf,parte); // quita los espacios de 'cadena' y
while((parte=strtok(NULL," ")) != NULL) // guarda el resultado en 'cadenaf'
strcat(cadenaf,parte); //
len=strlen(cadenaf);
for(c=0;c<=len-1;c++)
{
if(cadenaf[len-1-c]==cadenaf[c]) // comparación del primer caracter con el
pal++; // último, el segundo con el penúltimo, etc
}
if(pal==len) // si todos las caracteres coinciden, sí es palíndromo
cout<<"Sí es palíndromo!";
else
cout<<"No es palíndromo";
cin.get();
}
/*Creado por Raúl Rivas Cota (THEbatzuk)*/
Sin comentarios
Programa que lee un arreglo de 10 números y los ordena con el método de la burbuja de manera ascendente o descendente según se elija. Para esto utiliza una función que recibe el arreglo y la varible ‘ord’ (1=asc, 2=desc), luego utiliza otra función para imprimirlo.
#include<iostream>
using namespace std;
int ordenar(int[],int);
int imprimir(int[]);
int main()
{
int c,lista[9],ord;
for(c=0;c<=9;c++)
{
cout<<"Numero "<<c+1<<": "; cin>>lista[c];
}
cout<<"\nAscendente 1\nDescendente 2\n--> Opción: "; cin>>ord;
if(ord==1 || ord==2)
{
ordenar(lista,ord);
imprimir(lista);
}
}
int ordenar(int lista[],int ord)
{
int c1,c2,aux;
for(c1=0;c1<=9;c1++)
{
for(c2=0;c2<9;c2++)
{
if(ord==1)
{
if(lista[c2]>lista[c2+1])
{
aux=lista[c2];
lista[c2]=lista[c2+1];
lista[c2+1]=aux;
}
}
else
{
if(lista[c2]<lista[c2+1])
{
aux=lista[c2];
lista[c2]=lista[c2+1];
lista[c2+1]=aux;
}
}
}
}
return 0;
}
int imprimir(int lista[])
{
int c;
for(c=0;c<=9;c++)
cout<<lista[c]<<" ";
cin.get();cin.get();
}
/*Creado por Raúl Rivas Cota (THEbatzuk)*/
Sin comentarios
Este programa lee una frase por medio de cin.getline y con la función strtrok le quita los espacios. Cada vez que corta la cadena, un contador se aumenta. Al final se obtiene la longitud de la cadena sin espacios con la función strlen.
/*Programa para contabilizar el número de letras y de espacios
que tiene una frase */
#include<iostream>
#include<string.h>
using namespace std;
int main()
{
char frase[100], *parte, frasef[100]={0};
int lng,spc=0;
cout<<"Introduce una frase: "; cin.getline(frase, 100, '\n');
parte=strtok(frase," ");
strcat(frasef,parte);
while((parte=strtok(NULL," ")) != NULL)
{
strcat(frasef,parte);
spc++;
}
lng=strlen(frasef);
cout<<"Tu frase tiene "<<lng<<" letras y "<<spc<<" espacios";
cin.get();cin.get();
return 0;
}
/*Creado por Raúl Rivas Cota (THEbatzuk)*/
Sin comentarios
Anteriormente vimos como imprimir los números primos en un rango determinado por el usuario, ahora la idea es pedirle al usuario un número y decirle si es primo o no es primo.
#include<iostream>
using namespace std;
int main()
{
int num,c,res,nc=0;
cout<<"Introduce un número: "; cin>>num;
for(c=1;c<=num;c++)
{
res=num%c;
if(res==0)
nc++;
}
if(nc==2)
cout<<"Es primo";
else
cout<<"No es primo";
cin.get();cin.get();
}
En sí, es lo mismo que el anterior. Para darle mas presentación podemos hacer que no se salga a la primera, sino hasta que se introduzca, por ejemplo, un cero. Esto se hace con un ciclo do while.
#include<iostream>
using namespace std;
int main()
{
int num=1,c,res,nc=0,rep=0;
while(num!=0)
{
cout<<"Introduce un número: ";
if(rep==1)
{
cout<<" --> Para salir oprime cero: ";
}
rep++;
cin>>num;
for(c=1;c<=num;c++)
{
res=num%c;
if(res==0)
nc++;
}
if(nc==2)
cout<<"Es primo\n\n";
else
cout<<"No es primo\n\n";
nc=0;
}
}
¿Alguien sabe porqué la variable num empieza en 1 en este caso?
Sin comentarios
La idea es imprimir en pantalla los números primos entre 1 y un dato introducido por el usuario. Creo que es la primera vez que usamos un ciclo dentro de otro ciclo en este blog. Pero en realidad es muy sencillo:
#include<iostream>
using namespace std;
int main()
{
int n=0,c=0,c2=0,res=0,nc=0;
cout<<"Introduce el limite de numeros: "; cin>>n;
for(c=1;c<=n;c++)
{
for(c2=1;c2<=c;c2++)
{
res=c%c2;
if(res==0)
{
nc=nc+1;
}
}
if(nc==2)
{
cout<<" "<<c;
}
nc=0;
}
}
El operador % obtiene el residuo de la división de dos números. Por ejemplo:
10 % 3 = 1
Porque el 3 cabe 3 veces en el 10 y le sobra 1.
Explicación:
- El primer ciclo lleva la cuenta de los números de 1 a n de uno por uno en la variable c
- Luego se inicia un ciclo de 1 a c en la variable c2. Este ciclo se hará n veces porque está dentro de el primer ciclo
- En la variable res se guarda el residuo de dividir c / c2
- Si el residuo es cero, se incremento al contador nc
- Si al terminarse el segundo ciclo el contador nc es igual a 2, significa que el número es primo y lo imprime
Recuerden que los números primos son los que únicamente se dividen (sin dejar residuo) entre 1 y entre si mismos
1 Comentario
Es en realidad muy simple, se trata de pedir un conjunto de números e ir comparandalos para obtener el mayor. Un problema es que no sabemos la cantidad de números que se van a pedir, por lo que al principio del programa tenemos que pedir este valor.
#include<iostream>
using namespace std;
int main()
{
int n_num=0,num=0,elmayor=0,c=0;
cout <<"Introduce el numero de numeros: "; cin >> n_num;
for(c=1;c<=n_num;c++)
{
cout <<"\nIntroduce el numero " << c <<": "; cin >> num;
if(num>elmayor)
{
elmayor=num;
}
}
cout <<"\n\tEl numero mayor fue el " << elmayor;
cin.get();cin.get();
return 0;
}
Una parte importante es la estructura del ciclo:
for(c=1;c<=n_num;c++)
Significa que el ciclo va de 1 hasta ‘lo-que-nos-diga-el-usuario’.
Otra cosa es que usamos iostream y no usamos conio.h.
Sin comentarios