Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: ulbdan en 22 Enero 2017, 07:09 am



Título: Porcentaje de numeros primos en un vector
Publicado por: ulbdan en 22 Enero 2017, 07:09 am
Hola a todos, resulta que soy principiante en esto de la programación y tengo que hacer un programa en que me genere de forma aleatoria una cantidad n (ingresada por el usuario) de números y que de todos esos números generados me salga el porcentaje de cuantos son números primos. Tengo ya generados los números lo que me falta es el porcentaje pero no me sale porfa ayudenme.
Esto es lo que he hecho hasta ahora:

Código
  1. #include<stdio.h>
  2. #define LONG_VECTOR 20
  3.  
  4. char validar(int n);
  5. void generarValores(int a[],int n);
  6. void imprimirValores(int a[],int n);
  7. float porcentajePrimos(int a[],int n);
  8. int main(){
  9.    int valores[LONG_VECTOR], n;
  10.    printf("Ingrese la dimension: ");
  11.    scanf("%d", &n);
  12.    if(validar(n)=='n'){
  13.        printf("Error: Numero no valido!");
  14.        return -1;
  15.    }
  16.    generarValores(valores, n);
  17.    printf("Valores generados: \n");
  18.    imprimirValores(valores, n);
  19.    printf("\nPorcentaje de numeros primos: %.1f", porcentajePrimos(valores, n));
  20.    return 0;
  21. }
  22. char validar(int n){
  23.    if(n>20){
  24.        return 'n';
  25.    }else{
  26.        return 0;
  27.  
  28.    }
  29. }
  30.  
  31. void generarValores(int a[],int n){
  32.    int i;
  33.    for(i=0;i<n;i++){
  34.        a[i]=rand()%51;
  35.    }
  36. }
  37.  
  38. void imprimirValores(int a[],int n){
  39.    int i;
  40.    for(i=0;i<n;i++){
  41.        printf("%d\t",a[i]);
  42.    }
  43. }
  44.  
  45. float porcentajePrimos(int a[],int n){
  46.    int i,j,acu=0;
  47.    for(i=0;i<n;i++){
  48.            for(j=2;j<a[i];j++){
  49.                if(a[i]%j!=0){
  50.                    acu++;
  51.                }
  52.            }
  53.        return (acu/n)*100;
  54.    }
  55. }
  56.  
  57.  


· Los códigos deben ir en etiquetas GeSHi
>aquí las reglas del foro (http://foro.elhacker.net/reglas.htm)
-Engel Lex


Título: Re: Porcentaje de numeros primos en un vector
Publicado por: engel lex en 22 Enero 2017, 07:20 am
Código
  1. for(j=2;j<a[i];j++){
  2.    if(a[i]%j!=0){
  3.        acu++;
  4.    }
  5. }

cuando hagas cosas matemáticas recomiendo leer la teoría tras ello en wikipedia, normalmente ayuda a buscar maneras más eficientes... ese ciclo puede ser mucho más eficiente, pero ahorita no va al caso...

en ese código, cada vez que el numero no es multiplo suma, cosa que para este caso, bueno evita que logres tu objetivo...

lo que debes hacer es:

si el numero es multiplo, suma hace un break; para romper el ciclo y salir ahí tendrías la cantidad de no primos, ya ahí es cosa de restar y listo




Título: Re: Porcentaje de numeros primos en un vector
Publicado por: ulbdan en 22 Enero 2017, 08:01 am
Código:
for(j=2;j<a[i];j++){
                if(a[i]%j==0){
                    acu++;
                    break;
                }

            }
                r=n-acu;


Si es que le entendi bien engel lex algo no me sale o le entendi mal no se pero el acumulador se me queda en 0.


Título: Re: Porcentaje de numeros primos en un vector
Publicado por: engel lex en 22 Enero 2017, 16:45 pm
cuidado con las llaves, mira bien donde tienes el return, en tu codigo original lo tienias dentro del for, así que se retorna en la primera vuelta


Título: Re: Porcentaje de numeros primos en un vector
Publicado por: ulbdan en 22 Enero 2017, 21:58 pm
No se que estare haciendo mal pero no me sale :(


Título: Re: Porcentaje de numeros primos en un vector
Publicado por: engel lex en 22 Enero 2017, 22:34 pm
muestra el código que tienes


Título: Re: Porcentaje de numeros primos en un vector
Publicado por: ulbdan en 23 Enero 2017, 00:03 am
Código
  1. #include<stdio.h>
  2. #define LONG_VECTOR 20
  3.  
  4. char validar(int n);
  5. void generarValores(int a[],int n);
  6. void imprimirValores(int a[],int n);
  7. float porcentajePrimos(int a[],int n);
  8. int main(){
  9.    int valores[LONG_VECTOR], n;
  10.    printf("Ingrese la dimension: ");
  11.    scanf("%d", &n);
  12.    if(validar(n)=='n'){
  13.        printf("Error: Numero no valido!");
  14.        return -1;
  15.    }
  16.    generarValores(valores, n);
  17.    printf("Valores generados: \n");
  18.    imprimirValores(valores, n);
  19.    printf("\nPorcentaje de numeros primos: %.1f", porcentajePrimos(valores, n));
  20.    return 0;
  21. }
  22. char validar(int n){
  23.    if(n>20){
  24.        return 'n';
  25.    }else{
  26.        return 0;
  27.  
  28.    }
  29. }
  30.  
  31. void generarValores(int a[],int n){
  32.    int i;
  33.    for(i=0;i<n;i++){
  34.        a[i]=rand()%51;
  35.    }
  36. }
  37.  
  38. void imprimirValores(int a[],int n){
  39.    int i;
  40.    for(i=0;i<n;i++){
  41.        printf("%d\t",a[i]);
  42.    }
  43. }
  44.  
  45. float porcentajePrimos(int a[],int n){
  46.    int i,j,acu=0,r;
  47.    for(i=0;i<n;i++){
  48.            for(j=2;j<a[i];j++){
  49.                if(a[i]%j==0){
  50.                    acu++;
  51.                    break;
  52.                }
  53.                r=n-acu;
  54.                return (r/n)*100;
  55.            }
  56.    }
  57. }
  58.  

No se que es lo que estará mal...le intenté hacer tambien con una función aparte que me de los primos y los no primos pero tampoco me salio!!


Título: Re: Porcentaje de numeros primos en un vector
Publicado por: engel lex en 23 Enero 2017, 00:34 am
cuidado con las llaves, mira bien donde tienes el return, en tu codigo original lo tienias dentro del for, así que se retorna en la primera vuelta

es todo lo que te dije

las lineas indican los scope (donde abre y cierra cada llave) mira donde está el return... piensa: ¿en que momento se ejecutará?

(http://i.imgur.com/aP9fLF7.png)