Ver Mensaje Individual
  #8 (permalink)  
Antiguo 27/01/2016, 03:21
eferion
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 1 mes
Puntos: 204
Respuesta: ¿Cómo puedo contar cuantos números se repiten en un Array?

Cita:
Iniciado por sanandresm Ver Mensaje
Disculpenme por mi error.
Creo que aquí todos somos humanos y nos confundimos... no será la primera vez que respondo algo que no se parece en nada a lo que han preguntado y doy fe de que no es intencionado.

Como digo siempre, los foros son espacios frios porque es muy complicado saber las intenciones reales de quien escribe... en este caso daba la impresión de que te estabas enrocando y por eso el motivo de mi respuesta anterior.

Con respecto a tu código un par de cosillas, si me permites la crítica constructiva:

Código C:
Ver original
  1. int main()
  2. {
  3.     int i, t;
  4.     // ...
  5.     t=true;
  6.     // ...
  7. }

Si pones t=true lo lógico es que t sea de tipo bool. Que luego bool no sea más que un typedef de int es algo que te debería dar igual. Por un lado poner bool t indica que esa variable la vas a usar para almacenar booleanos. Otro beneficio adicional de bool es que es su rango puede adaptarse a entornos concretos, por lo que si en un sistema X resulta más óptimo utilizar unsigned short para gestionar los bool basta con modificar el alias y el código se aprovechará de la mejora mientras que si usas int...

Además, sigo insistiendo en que t no significa absolutamente nada luego no deberías usar ese nombre para nada.

Código C:
Ver original
  1. int mir=1000

¿Estás seguro de que si le dejas al usuario introducir valores no va a menter valores superiores a 1000? Estas tonterías suelen ser una fuente de problemas. Tienes a tu disposición una serie de constantes que te proporcionan los números límite dentro de un rango, es decir tanto el mayor como el menor... lo bueno de usar esas constantes es que se adaptarán automáticamente al sistema en el que trabajes:

Código C:
Ver original
  1. #include <limits.h>
  2.  
  3. int mir= INT_MAX;

Otro tema a mejorar es el ámbito de las variables. En serio, ve acostumbrándote a declarar las variables cuando las necesitas y no al inicio de la función. Esa es una herencia de versiones antiguas de C. Hacer que una variable tenga un ámbito mínimo evita errores tontos... veamos:

Código C:
Ver original
  1. int main()
  2. {
  3.   int i,j;
  4.  
  5.   for( i=0; i<10; i++ )
  6.     printf("%d ",i);
  7.  
  8.   for( j=0; j<10; i++ )
  9.     printf("%d ",j);
  10. }

El ejemplo es muy tonto pero sirve para el caso. La idea es imprimir 2 veces una secuencia de 0 a 9... pero el programa se queda atascado en el segundo bucle.

Aquí es fácil encontrar el error... ¿pero qué sucedería si añadimos 20 variables más al inicio del main y un par de decenas de líneas de código entre ambos for? lo mismo ya no resulta tan obvio el problema, verdad? Sin embargo:

Código C:
Ver original
  1. int main()
  2. {
  3.   for( int i=0; i<10; i++ )
  4.     printf("%d ",i);
  5.  
  6.   for( int j=0; j<10; i++ )
  7.     printf("%d ",j);
  8. }

Ahora el compilador nos indica que hay un error... i no está declarada en el segundo for. Partiendo de la base de que C es un lenguaje con unas reglas bastante laxas, cualquier medida que podamos implementar para que el compilador nos ayude a detectar problemas debería ser siempre bien recibida. Y en este caso reducir el ámbito de las variables al mínimo es una buena práctica.

Además, esto te permite repetir el nombre de las variables siempre y cuando su ámbito no sea exactamente el mismo:

Código C:
Ver original
  1. int main()
  2. {
  3.   int i = 5;
  4.  
  5.   for( int i=0; i<10; i++ )
  6.     printf("%d ",i);
  7.  
  8.   printf("\n%d ",i);
  9. }

Un saludo.
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.