Autor
|
Tema: Porcentaje de numeros primos en un vector (Leído 2,937 veces)
|
ulbdan
Desconectado
Mensajes: 4
|
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: #include<stdio.h> #define LONG_VECTOR 20 char validar(int n); void generarValores(int a[],int n); void imprimirValores(int a[],int n); float porcentajePrimos(int a[],int n); int main(){ int valores[LONG_VECTOR], n; printf("Ingrese la dimension: "); if(validar(n)=='n'){ printf("Error: Numero no valido!"); return -1; } generarValores(valores, n); printf("Valores generados: \n"); imprimirValores(valores, n); printf("\nPorcentaje de numeros primos: %.1f", porcentajePrimos (valores , n )); return 0; } char validar(int n){ if(n>20){ return 'n'; }else{ return 0; } } void generarValores(int a[],int n){ int i; for(i=0;i<n;i++){ } } void imprimirValores(int a[],int n){ int i; for(i=0;i<n;i++){ } } float porcentajePrimos(int a[],int n){ int i,j,acu=0; for(i=0;i<n;i++){ for(j=2;j<a[i];j++){ if(a[i]%j!=0){ acu++; } } return (acu/n)*100; } }
· Los códigos deben ir en etiquetas GeSHi >aquí las reglas del foro -Engel Lex
|
|
« Última modificación: 22 Enero 2017, 07:11 am por engel lex »
|
En línea
|
|
|
|
engel lex
|
for(j=2;j<a[i];j++){ if(a[i]%j!=0){ acu++; } }
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
|
|
« Última modificación: 22 Enero 2017, 07:22 am por engel lex »
|
En línea
|
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
|
|
|
ulbdan
Desconectado
Mensajes: 4
|
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.
|
|
« Última modificación: 22 Enero 2017, 08:04 am por ulbdan »
|
En línea
|
|
|
|
engel lex
|
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
|
|
|
En línea
|
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
|
|
|
ulbdan
Desconectado
Mensajes: 4
|
No se que estare haciendo mal pero no me sale
|
|
|
En línea
|
|
|
|
engel lex
|
muestra el código que tienes
|
|
|
En línea
|
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
|
|
|
ulbdan
Desconectado
Mensajes: 4
|
#include<stdio.h> #define LONG_VECTOR 20 char validar(int n); void generarValores(int a[],int n); void imprimirValores(int a[],int n); float porcentajePrimos(int a[],int n); int main(){ int valores[LONG_VECTOR], n; printf("Ingrese la dimension: "); if(validar(n)=='n'){ printf("Error: Numero no valido!"); return -1; } generarValores(valores, n); printf("Valores generados: \n"); imprimirValores(valores, n); printf("\nPorcentaje de numeros primos: %.1f", porcentajePrimos (valores , n )); return 0; } char validar(int n){ if(n>20){ return 'n'; }else{ return 0; } } void generarValores(int a[],int n){ int i; for(i=0;i<n;i++){ } } void imprimirValores(int a[],int n){ int i; for(i=0;i<n;i++){ } } float porcentajePrimos(int a[],int n){ int i,j,acu=0,r; for(i=0;i<n;i++){ for(j=2;j<a[i];j++){ if(a[i]%j==0){ acu++; break; } r=n-acu; return (r/n)*100; } } }
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!!
|
|
« Última modificación: 23 Enero 2017, 00:25 am por engel lex »
|
En línea
|
|
|
|
engel lex
|
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á?
|
|
|
En línea
|
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
|
|
|
|
|