elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Frecuencia en una serie numeria aleatoria
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Frecuencia en una serie numeria aleatoria  (Leído 2,139 veces)
acega

Desconectado Desconectado

Mensajes: 14


Ver Perfil
Frecuencia en una serie numeria aleatoria
« en: 6 Marzo 2013, 03:17 am »

Hola pues me trabe con algo en este programa que consiste en imprimir 30 numeros aleatorios del 1 al 10 y dar la frecuencia de cada numero donde me trabe fue en lo ultimo ya que no supe donde ubicar el switch-case
El código es este:
Código
  1. #include <stdio.h>
  2. #include <iostream.h>
  3. #include <conio.h>
  4. #include <stdlib.h>
  5. void main (void)
  6. {
  7. int arry[29],f[9];
  8. randomize();
  9.  
  10. for (int i=0;i<=29;i++)
  11. {
  12.  
  13.  arry[i]=random(9)+1;
  14.  switch(arry[i])
  15.   {
  16.   case 1:
  17.    f[0]+1;
  18.   break;
  19.   case 2:
  20.    f[1]+1;
  21.   break;
  22.   case 3:
  23.   f[2]+1;
  24.   break;
  25.  
  26.   case 4:
  27.   f[3]+1;
  28.   break;
  29.  
  30.   case 5:
  31.   f[4]+1;
  32.   break;
  33.  
  34.   case 6:
  35.   f[5]+1;
  36.   break;
  37.   case 7:
  38.   f[6]+1;
  39.   break;
  40.   case 8:
  41.   f[7]+1;
  42.   break;
  43.   case 9:
  44.   f[8]+1;
  45.   break;
  46.   case 10:
  47.   f[9]+1;
  48.   break;
  49.   }
  50.  
  51.  
  52. }
  53. for (int j=0;j<=29;j++)
  54.  {
  55.  
  56.   cout<<arry[j]<<" ";
  57.  }
  58. for(int k=0;k<=9;k++)
  59.  {
  60.   cout<<"\n Frecuencia: "<<f[k];
  61.  }
  62.  
  63. getch();
  64. }


En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Frecuencia en una serie numeria aleatoria
« Respuesta #1 en: 6 Marzo 2013, 04:01 am »

Te pido por favor que leas las recomendaciones que te dimos en tu otro tema, eso para solucionar algunos problemas que también se presentan en este programa.

El error principal se encuentra en la sentencia switch:
Código
  1. switch (arry[i]){
  2. case 1:
  3.   f[0]+1;
  4.   break;
  5. case 2:
  6.   f[1]+1;
  7.   break;
  8. case 3:
  9.   f[2]+1;
  10.   break;
  11.  
  12. // ...

Primero, para incrementar el contador correspondiente debes utilizar:
Código
  1. switch (arry[i]){
  2. case 1:
  3.   f[0]++; // Mismo efecto que f[0] = f[0] + 1;
  4.   break;
  5. case 2:
  6.   f[1]++;
  7.   break;
  8. case 3:
  9.   f[2]++;
  10.   break;
  11.  
  12. // ...

Segundo, si revisas con cuidado te darás cuenta que esa sentencia (el switch) no es necesaria, puedes remplazarla con una asignación:
Código
  1. f[arry[i] - 1]++;

Un saludo


En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
85

Desconectado Desconectado

Mensajes: 206



Ver Perfil WWW
Re: Frecuencia en una serie numeria aleatoria
« Respuesta #2 en: 6 Marzo 2013, 04:29 am »

Por ahí el muchacho quiso poner:

Código:
f[0]+=1;

lo cual incrementa en 1.. Pero le faltaba el '='  :rolleyes:

En línea

Me cerraron el Windows Live Spaces, entonces me creé un WordPress XD
http://etkboyscout.wordpress.com/
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Frecuencia en una serie numeria aleatoria
« Respuesta #3 en: 6 Marzo 2013, 09:31 am »

Por ahí el muchacho quiso poner:

Código:
f[0]+=1;

lo cual incrementa en 1.. Pero le faltaba el '='  :rolleyes:



 ;-) ;-)Eso mismo me parece a mí en principio, aunque viendo el resto  de los mensajes del compilador:

Código:
|5|error: ':[b]:main' must return 'int'|[/b]
|In function 'int main()':|
|8|error: 'randomize' was not declared in this scope|
|13|error: 'random' was not declared in this scope|
|56|error: 'cout' was not declared in this scope|
|60|error: 'cout' was not declared in this scope|


* Los include está puestos tipo C, es decir ".h " , y no habría mayor problema  ... salvo el iostream, que no lo lleva y hace que el programa ni compile.


Código
  1. int arry[29],f[9];


* Cuando deberían ser. para contener 30 y 10:

Código
  1. int arry[30],f[10]={0};



 * Además el compilador "se queja" con el tipo void asignado a main pide int.

* Falta al menos


Código
  1. using namespace std;

* "Canta" con la función randomize, que si es de conio.h deberías cambiarla por la versión estandar del C: srand, así como random por rand y random(9) generaría números hasta 9 no incluido con lo que +1 daría nueve y no se llegaría nunca la case 10. Aunque supongo que el error está en que los quieres desde cero a nueve, ya que así están las condenaciones de los for.

* rand, en C al menos o se especificaría como "rand(9)"


Código
  1. srand()%9;

Aunque como los quieres incluyendo el diez y a partir de 1 sería:

Código
  1. 1+srand()%10

* getch() pertenece a la librería no estandar conio, que podría sustittuirse por otra estandar, como getchar () o cin.get().

* Los resultados de frecuencia serían" basura", ya que no están inicializados.

* Como comento rir el switch se puede sustituir y sequedaríaría :


Código
  1. f[arry[i]-1]++;

Con todo esto el resultado sería algo como esto:

Código
  1. 5 7 1 5 9 4 6 10 4 6 7 8 6 10 8 4 9 3 7 8 6 3 8 3 2 3 3 8 6 3
  2. Frecuencia del  1 es  1
  3. Frecuencia del  2 es  1
  4. Frecuencia del  3 es  6
  5. Frecuencia del  4 es  3
  6. Frecuencia del  5 es  2
  7. Frecuencia del  6 es  5
  8. Frecuencia del  7 es  3
  9. Frecuencia del  8 es  5
  10. Frecuencia del  9 es  2
  11. Frecuencia del  10 es  2
  12.  
  13.  
  14.  

Y casi me olvido, el código:

Código
  1. #include <iostream>
  2. #include <ctime>
  3. #include <cstdlib>
  4. using namespace std;
  5.  
  6. int main (void){
  7. int arry[30],f[10]={0};
  8. srand((unsigned) time(NULL));
  9. for (int i=0;i<30;i++) {
  10.        arry[i]=1+rand()%10;
  11.        f[arry[i]-1]++;
  12. }
  13. for (int j=0;j<30;j++)
  14.    cout<<arry[j]<<" ";
  15. for(int k=0;k<10;k++)
  16.     cout<<"\n Frecuencia del  "<< k+1 << " es  " <<f[k];
  17. cin.get();
  18. return 0;
  19. }
  20.  
  21.  

Saluditos!. ...
« Última modificación: 6 Marzo 2013, 10:08 am por leosansan » En línea

acega

Desconectado Desconectado

Mensajes: 14


Ver Perfil
Re: Frecuencia en una serie numeria aleatoria
« Respuesta #4 en: 12 Marzo 2013, 03:44 am »

oigan! muchas gracias a todos!! si me ayudo a resolver el problema y ademas a estructurar el siguiente programa que me dejaron :D
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
eleccion aleatoria de fotogramas
Diseño Gráfico
White^^croW 0 1,642 Último mensaje 15 Marzo 2005, 08:38 am
por White^^croW
imagen aleatoria VB
Programación Visual Basic
jebg 3 4,428 Último mensaje 30 Enero 2006, 09:52 am
por Grimble Grumble
Escojencia Aleatoria
Java
KAKOTICO 7 4,656 Último mensaje 14 Julio 2010, 09:08 am
por Debci
Letra aleatoria
Programación C/C++
MasterPunk 2 3,391 Último mensaje 31 Mayo 2011, 01:57 am
por MasterPunk
matriz aleatoria
Programación C/C++
ALONSOQ 3 2,485 Último mensaje 18 Junio 2012, 18:42 pm
por ALONSOQ
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines