Ayuda con un programa en C++

Iniciado por Gagy, 3 Diciembre 2012, 22:51 PM

0 Miembros y 2 Visitantes están viendo este tema.

Gagy

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!!

durasno

Si te resuelven todo, entonces como vas a aprender???



Saludos
Ahorrate una pregunta, lee el man

Xenomorfo77

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 ???

leosansan

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++:
Código (cpp) [Seleccionar]
#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!.

Gagy

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.

leosansan

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:
Código (cpp) [Seleccionar]

#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!.

Gagy

¡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?

Ferno

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.

leosansan

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:
Código (cpp) [Seleccionar]

#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;
}


Gagy

¡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?