Hola de nuevo a todos. Antes os había preguntado por un programa en C++, ahora os pido que me ayudeis con este. Dice así:
"Leemos un número entero por teclado. Calcular la media de los números primos introducidos y decir cuál es el más grande y el más pequeño"
Necesito hacerlo con el código más simple posible, con
#include<iostream> y #include<cmath>
¡¡Gracias!!
Si te resuelven todo, entonces como vas a aprender???
Saludos
Cita de: jps96 en 3 Diciembre 2012, 22:51 PM
Hola de nuevo a todos. Antes os había preguntado por un programa en C++, ahora os pido que me ayudeis con este. Dice así:
"Leemos un número entero por teclado. Calcular la media de los números primos introducidos y decir cuál es el más grande y el más pequeño"
Necesito hacerlo con el código más simple posible, con
#include<iostream> y #include<cmath>
¡¡Gracias!!
Repite el enunciado de nuevo, si leemos un numero no podemos hacer medias. Luego dices calcular la media de los numeros PRIMOS introducidos ???
CitarTienes que aportar lo que llevas desarrollado de tu código, si no la respuesta es: no se hacen tareas.
Pero por si te has quedado en blanco, una pequeña ayuda es el ejercicio resuelto .... en C y sin explicaciones. La próxima si aportas algo será en C++:
#include <stdio.h>
#include <math.h>
#include <limits.h>
int main()
{
long long int N,suma=0,mayor= LONG_LONG_MIN,menor= LONG_LONG_MAX;
int cont=0;
while(1){
printf ("Introduzca un numero:");
scanf ("%lld",&N);
if (N==0) break;
if (esPrimo(N)==0) printf ("%lld NO es primo \n",N);
else {
printf ("%lld es primo \n",N);
suma+=N;cont++;
if (N>mayor) mayor=N;
if (N<menor) menor=N;
}
}
if (cont>=1) printf("La media es %g , el mayor %lld y el menor %lld.\n",(float) suma/cont,mayor,menor);
else puts ("No hay primos");
return 0;
}
int esPrimo(long long int n)
{
int rq ,i;
rq = (int) sqrt(n);
for ( i = 2; i <= rq; i++)
{
if (n%i == 0)
return 0;
}
return n;
}
Saluditos!.
Usuario durasno, me pasé toda una tarde a ver si podía resolverlo y nada.
Repito el enunciado, perdón si no ha sido entendible. Dice así:
"Leemos un número indefinido de números por teclado. El programa nos pregunta cuantos números queremos poner. Por ejemplo, si ponemos 7, el programa nos dice 7 veces: Introduce un número. Entonces, cuando ya hemos introducido los números, el programa averigua si hay algún número primo en alguno de los números introducidos. Por ejemplo, si hay 3 números primos, se calcula la media de esos tres números y además decir cual es el número primo más grande introducido y el más pequeño"
Tengo que hacerlo con el código más simple posible, con iostream y cmath, si es posible.
Por favor, preguntadme cualquier duda. A ver si podéis ayudarme porque me estoy volviendo loco.
Un saludo.
Cita de: jps96 en 4 Diciembre 2012, 11:27 AM
Usuario durasno, me pasé toda una tarde a ver si podía resolverlo y nada.
CitarPero lo que no acabas de entender es que si te has pasado toda una tarde algo de código tendrás, aunque esté incompleto se pide que lo cuelgues.
Pero en fin, por esta vez "me lo creo" . A ver si te sirve esto:
#include <iostream>
#include <stdio.h>
#include <climits>
using namespace std;
main() {
int j,num,k,suma=0,mayor= INT_MIN,menor= INT_MAX;
int i,N,cont=0;
cout <<"Indica el total de numeros: ";
cin >> N;
for (i=0;i<N;i++){
cout <<"Ingresa el numero "<<i+1<<": ";
cin >>num;
k=0;
for (j=1; j<=num; j++)
if (num%j == 0)
k++;
if (k == 2 || num == 1){
suma+=num;cont++;
if (num>mayor) mayor=num;
if (num<menor) menor=num;
cout <<"El numero "<<num<<" esprimo"<<endl;
}
else cout <<"El numero "<<num<<" NO esprimo"<<endl;
}
cout <<"El numero total de primos es :"<<cont<<endl;
if (cont>=1) cout <<"La media es "<< (float) suma/cont <<" , el mayor "<< mayor <<" y el menor "<< menor<<endl;
else puts ("No hay primos");
return 0;
}
Saluditos!.
¡Muchas gracias leosansan! No sabes del lío que me has sacado.
Pero una pregunta, ¿el ejercicio se podría hacer solamente con las librerías de #include <iostream>
y #include <cmath>, sin necesidad de utilizar stdio.h ni climits?
Si se puede, pedo debes hacer algunos cambios en el code.
Primero, para no depender de stdio.h, debes cambiar la función puts() por un cout.
Segundo, para no depender de climits, debes modificar la inicialización de las variables 'mayor' y 'menor' por otros números que cumplan con la misma función que las macros INT_MAX e INT_MIN (climits se usa para poder utilizar estas dos macros).
Por ejemplo, INT_MAX puedes modificarla por un valor muy alto, e INT_MIN por 0.
Cita de: jps96 en 4 Diciembre 2012, 13:25 PM
Pero una pregunta, ¿el ejercicio se podría hacer solamente con las librerías de #include <iostream>
y #include <cmath>, sin necesidad de utilizar stdio.h ni climits?
Aunque ya Ferno te ha contestado a parte de la pregunta, podrías incluir la librería math y aprovechar que para que un número sea primo basta con que no sea divisible entre 2 y la raíz del número. Con todas las aportaciones te quedaría:
#include <iostream>
#include <cmath>
using namespace std;
main() {
int j,num,k,suma=0,mayor= 0,menor= 1e12;
int i,N,cont=0;
cout <<"Indica el total de numeros: ";
cin >> N;
for (i=0;i<N;i++){
/*while (1){*/
cout <<"Ingresa el numero "<<i+1<<": ";
cin >>num;
k=0;
for (j=2; j<=sqrt(num); j++)
if (num%j == 0)
k++;
if (k == 0 || num == 1){
suma+=num;cont++;
if (num>mayor) mayor=num;
if (num<menor) menor=num;
cout <<"El numero "<<num<<" esprimo"<<endl;
}
else cout <<"El numero "<<num<<" NO esprimo"<<endl;
}
cout <<"El numero total de primos es :"<<cont<<endl;
if (cont>=1) cout <<"La media es "<< (float) suma/cont <<" , el mayor "<< mayor <<" y el menor "<< menor<<endl;
else cout<<"No hay primos";
return 0;
}
¡Muchas gracias leosansan!
Pero el programa se cierra inesperadamente al escribir todos los números y no da tiempo a leer el resultado.
¿Dónde podría estar el error?
Cita de: jps96 en 4 Diciembre 2012, 16:16 PM
..........................
Pero el programa se cierra inesperadamente al escribir todos los números y no da tiempo a leer el resultado.
¿Dónde podría estar el error?
Es el compilador, supongo que usas Dev-C++. Para evitar el cierre inmediato de la ventana añade dos getchar al final, antes del return y añade al principio la libreria #include <cstdio> .Saluditos!.
P.D:Pásate al Code:::Blocks.
En todo caso es el IDE. El compilador tanto de DevC++ como el de Code::Blocks es MinGW, que es una versión del GCC.
Saludos!
Gracias!
Hay que tener cuidado con el 2, que es primo
Cita de: cypascal en 4 Diciembre 2012, 22:01 PM
Hay que tener cuidado con el 2, que es primo
CitarY primo sale en el código posteado.
Saluditos!.
Solo me remití a leer lo que ponía en tu mensaje, no compilé ni ejecuté el codigo, que suponía que estaba bien:
Cita de: leosansan en 4 Diciembre 2012, 14:24 PM
Aunque ya Ferno te ha contestado a parte de la pregunta, podrías incluir la librería math y aprovechar que para que un número sea primo basta con que no sea divisible entre 2 y la raíz del número. Con todas las aportaciones te quedaría:
No quise decir que estuviera mal, pero perdón de todas formas por el mal enentdido.
Salu10
Estoy tonto y pensé que no lo habia enviado.
Salu10