ayuda en c++

Iniciado por yina07, 4 Noviembre 2019, 20:56 PM

0 Miembros y 1 Visitante están viendo este tema.

yina07

Saludos! tengo una tarea que dice  LEER 100 NÚMEROS QUE SEAN POSITIVOS,  CALCULAR Y MOSTRAR LA SUMA DE ESOS 100 NÚMEROS.

y no entiendo si es que tengo que imprimir 100 numeros sumandose cada uno o si es que tengo que pedirle al usuario que me ingrese 100 numeros para luego sumarse, la verda estoy muy confundida, lo unico que he podido hacer es esto:

#include <iostream>
#include <math.h>
using namespace std;

// 6. LEER 100 NÚMEROS QUE SEAN POSITIVOS,  CALCULAR Y MOSTRAR LA SUMA DE ESOS 100 NÚMEROS.



int main (){
   
int numeros;


cout<<"Ingrese un numero:"<<endl;
cin>>numeros;


if (numeros>=0){


cout<<"La suma de los numeros es:"<<numeros + numeros;


}

else if (numeros<=100){
   
   
   cout<<numeros+numeros;
   
      
   
}



else cout<<"no puede ser negativo";


   
   
   return 0;
}

y se que esta mal, por favor ayudenme a aclararme como podria hacerlo, los que programan o han programado en c++. Gracias!!

K-YreX

Bueno en lo que al enunciado respecta, leer 100 números suele referirse a pedir 100 números al usuario a no ser que se especifique leer números de un fichero u otra entrada diferente a la estándar (que es por teclado).
Lo de que sean números positivos puede interpretarse de dos maneras:
  • Comprobar que los números introducidos sean positivos y contabilizar únicamente los que lo sean.
  • Establecer la precondición de que sean positivos por lo que el programador/a (en este caso, tú) no tiene que tomar ninguna medida para asegurar que dicha condición se cumpla.
    En este caso que no se concreta ninguna de las dos interpretaciones supongo que dependerá de lo que sabes o no sabes hacer. Si sabes (o deberías saber) hacer un filtro (usando <do while> normalmente) pues mi recomendación es que lo implementes ya que te ayudará a practicar más que si no lo haces; en cambio, si es algo que todavía no has estudiado, no pasa nada, se presupone que los valores serán positivos y no tienes que hacer nada.
    Por último, mostrar la suma de los 100 números pues lógicamente es sumar los 100 valores positivos y mostrar el resultado final.

    En lo que a tu código respecta, primero para próximas consultas (puedes modificar tu mensaje para corregirlo) los códigos colócalos entre etiquetas de Código GeSHi seleccionando el lenguaje correspondiente (C++ en tu caso).
    Código (cpp) [Seleccionar]

    #include <iostream>
    // La libreria math.h no la utilizas ya que esta se usa para funciones como calcular potencias, raices cuadradas y otras funciones complejas
    // Los operadores basicos (suma, resta, producto, division,...) no estan en esta libreria
    #include <math.h>

    using namespace std;

    int main (){   
        int numeros;

        cout<<"Ingrese un numero:"<<endl; // Pedir un numero al usuario
        cin>>numeros; // Guardarlo

        if (numeros>=0){ // Si el numero es mayor o igual que 0...
            cout<<"La suma de los numeros es:"<<numeros + numeros; // ...mostrar el doble del numero introducido
        }
        else if (numeros<=100){ // si no es mayor o igual que 0 pero si es menor o igual que 100...
            cout<<numeros+numeros; // mostrar el doble del numero introducido
        }
        else cout<<"no puede ser negativo"; // Si no es mayor o igual que 0 y tampoco es menor o igual que 100...Avisar de que no puede ser negativo
       
        return 0;
    }

    Te he comentado tu código para que veas lo que estás haciendo. Los problemas que hay son los siguientes:
  • El usuario sólo introduce un número, no 100.
  • Si el número es 0 o mayor muestra su doble, si no es mayor o igual que 0 pero sí es menor o igual que 100 (cosa un poco rara), muestra el doble también y si no es mayor o igual que 0 y tampoco es menor o igual que 100 entonces no es válido. Ahora dime... habría algún número no válido?? Porque hasta donde yo sé contar, todos lo son... :silbar:

    El algoritmo correcto en pseudocódigo sería algo así (sin el filtro de los números positivos):

    INICIO
        numerosIntroducidos := 0
        suma := 0
        MIENTRAS numerosIntroducidos < 100 HACER
            PEDIR numero
            suma := suma + numero
            numerosIntroducidos := numerosIntroducidos + 1
        FIN MIENTRAS
        MOSTRAR suma
    FIN
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;

@XSStringManolo

Algo que me ayuda a mi a programar es crear unas órdenes de exactamente lo que quiero hacer instrucción a instrucción independientemente de mis conocimientos en el lenguaje de programación. Después implemento cada instrucción en código.
En caso de no ser capaz de completar una de esas instrucciones me leo algún capítulo de un libro sobre esa temática. Te recomiendo descargar varios libros del lenguaje. Mínimo tener 10 libros descargados. Puedes ir leyéndolos todos a lo largo del tiempo. Mirarlos todos sin pararte mucho para usarlos como referencia y acordarte: "Ahh pues este tema de las funciones venía con muchos ejemplos sencillos en el libro Programación para principiantes y muy bien explicado en fundamentos de la programación en C++. Voy a revisar como era.

Entonces, según tu enunciado, las instrucciones que yo planteo de lo que tengo que hacer:
LEER 100 NÚMEROS QUE SEAN POSITIVOS,  CALCULAR Y MOSTRAR LA SUMA DE ESOS 100 NÚMEROS.

Leer 100 numeros.
Código (cpp) [Seleccionar]
cout << "Pon 100 numeros positivos" << endl;
int numero = 0;
for (short int i = 0; i != 100; ++i)
{
cin >> numero;
}


Que sean positivos:
Código (cpp) [Seleccionar]
cout << "Pon numeros" << endl;
int numero = 0;
for (short int i = 0; i != 100; ++i)
{
   if (numero > 0)
   {
   cin >> numero;
   }

   else
   {
   --i;
   }
}


Calcular la suma de esos 100 numeros:
Código (cpp) [Seleccionar]
cout << "Pon numeros" << endl;
int numero = 0;
int suma = 0;
for (short int i = 0; i != 100; ++i)
{
   if (numero > 0)
   {
   cin >> numero;
   suma = suma + numero;
   }

   else
   {
   --i;
   }
}


Mostrar la suma de esos 100 numeros:
Código (cpp) [Seleccionar]
cout << "Bienvenido, puede sumar 100 numeros positivos." << endl;
int numero = 0;
int suma = 0;
for (short int i = 0; i != 100; ++i)
{
   if (numero > 0)
   {
   cout << endl << "Introduce un número positivo ";
   cin >> numero;
   cout << endl << endl << "Realizando la suma número " << i << ":" << endl;
   cout << "Se suma el número " << numero << " y " << suma;
   suma = suma + numero;
   cout << " y el resultado es " << suma << endl;
   }

   else
   {
   cout << "El numero introducido no es positivo" << endl;
   --i;
   }
}



Librerías, funciones, comentarios...
Código (cpp) [Seleccionar]
#include <iostream>
/* Incluye la librería para entrada salida del sistema.
En concreto para cout, cin, endl y cin.get()
*/

using namespace std;
/* Utiliza el namespace standart
En concreto para no tener que especificarlo manualmente std::cout std:cin ... y así reducir el tamaño del código.
*/


int main() /* Función principal obligatoria del programa */
{ /* Inicio del cuerpo de la función principal */

cout << "Bienvenido, puede sumar 100 numeros positivos." << endl;
/* Imprime en pantalla (y hace 1 salto de linea al final):
Bienvenido, puede sumar 100 numeros positivos.


unsigned int numero = 0;
unsigned int suma = 0;
/* Se declaran dos variables de tipo entero sin signo y se inicializan asignándoles valor 0.
*/

   for (unsigned short int i = 0; i != 100; ++i) /* Bucle for:
Primer parámetro, inicialización de variables. Se declara una variable de tipo entero corto, sin signo y se le asigna valor 0.
Segundo parámetro, condición a cumplir para salida del bucle. Continua el bucle mientras la variable i no tenga el valor 0 al evaluar la condición.
Tercer parámetro, modificación para cumplir la condición. Se suma 1 a la variable i en cada iteración.
*/
   { /* Cuerpo del bucle for.

      if (numero >= 0) /* Condición: Si la variable número es mayor o igual a 0. */
      { /* Cuerpo del if.
      cout << endl << "Introduce un número positivo ";

      cin >> numero;
/* Se obtiene el numero introducido por el usuario */

      cout << endl << endl << "Realizando la suma número " << i << ":" << endl;
      cout << "Se suma el número " << numero << " y " << suma;

     suma = suma + numero;
/* Se suman la variable para guardar el resultado de la suma y el número del usuario.

    cout << " y el resultado es " << suma << endl;
/* Se imprime el resultado de la suma */
      }

      else /* Si el número es menor a 0 */
      {
      cout << "El numero introducido no es positivo" << endl;
      --i; /* Se resta 1 a i para no contabilizar esta iteración del bucle for */
      }
   }

cin.get(); /* Pausa la consola para que no se cierre automáticamente. */
return 0; /* Retorna el control a la función principal */
}

K-YreX

Cita de: string Manolo en  5 Noviembre 2019, 02:56 AM
Algo que me ayuda a mi a programar es crear unas órdenes de exactamente lo que quiero hacer instrucción a instrucción independientemente de mis conocimientos en el lenguaje de programación. Después implemento cada instrucción en código.
En caso de no ser capaz de completar una de esas instrucciones me leo algún capítulo de un libro sobre esa temática. Te recomiendo descargar varios libros del lenguaje. Mínimo tener 10 libros descargados. Puedes ir leyéndolos todos a lo largo del tiempo. Mirarlos todos sin pararte mucho para usarlos como referencia y acordarte: "Ahh pues este tema de las funciones venía con muchos ejemplos sencillos en el libro Programación para principiantes y muy bien explicado en fundamentos de la programación en C++. Voy a revisar como era.

Entonces, según tu enunciado, las instrucciones que yo planteo de lo que tengo que hacer:
LEER 100 NÚMEROS QUE SEAN POSITIVOS,  CALCULAR Y MOSTRAR LA SUMA DE ESOS 100 NÚMEROS.

Leer 100 numeros.
Código (cpp) [Seleccionar]
cout << "Pon 100 numeros positivos" << endl;
int numero = 0;
for (short int i = 0; i != 100; ++i)
{
cin >> numero;
}


Que sean positivos:
Código (cpp) [Seleccionar]
cout << "Pon numeros" << endl;
int numero = 0;
for (short int i = 0; i != 100; ++i)
{
   if (numero > 0)
   {
   cin >> numero;
   }

   else
   {
   --i;
   }
}


Calcular la suma de esos 100 numeros:
Código (cpp) [Seleccionar]
cout << "Pon numeros" << endl;
int numero = 0;
int suma = 0;
for (short int i = 0; i != 100; ++i)
{
   if (numero > 0)
   {
   cin >> numero;
   suma = suma + numero;
   }

   else
   {
   --i;
   }
}


Mostrar la suma de esos 100 numeros:
Código (cpp) [Seleccionar]
cout << "Bienvenido, puede sumar 100 numeros positivos." << endl;
int numero = 0;
int suma = 0;
for (short int i = 0; i != 100; ++i)
{
   if (numero > 0)
   {
   cout << endl << "Introduce un número positivo ";
   cin >> numero;
   cout << endl << endl << "Realizando la suma número " << i << ":" << endl;
   cout << "Se suma el número " << numero << " y " << suma;
   suma = suma + numero;
   cout << " y el resultado es " << suma << endl;
   }

   else
   {
   cout << "El numero introducido no es positivo" << endl;
   --i;
   }
}



Librerías, funciones, comentarios...
Código (cpp) [Seleccionar]
#include <iostream>
/* Incluye la librería para entrada salida del sistema.
En concreto para cout, cin, endl y cin.get()
*/

using namespace std;
/* Utiliza el namespace standart
En concreto para no tener que especificarlo manualmente std::cout std:cin ... y así reducir el tamaño del código.
*/


int main() /* Función principal obligatoria del programa */
{ /* Inicio del cuerpo de la función principal */

cout << "Bienvenido, puede sumar 100 numeros positivos." << endl;
/* Imprime en pantalla (y hace 1 salto de linea al final):
Bienvenido, puede sumar 100 numeros positivos.


unsigned int numero = 0;
unsigned int suma = 0;
/* Se declaran dos variables de tipo entero sin signo y se inicializan asignándoles valor 0.
*/

   for (unsigned short int i = 0; i != 100; ++i) /* Bucle for:
Primer parámetro, inicialización de variables. Se declara una variable de tipo entero corto, sin signo y se le asigna valor 0.
Segundo parámetro, condición a cumplir para salida del bucle. Continua el bucle mientras la variable i no tenga el valor 0 al evaluar la condición.
Tercer parámetro, modificación para cumplir la condición. Se suma 1 a la variable i en cada iteración.
*/
   { /* Cuerpo del bucle for.

      if (numero >= 0) /* Condición: Si la variable número es mayor o igual a 0. */
      { /* Cuerpo del if.
      cout << endl << "Introduce un número positivo ";

      cin >> numero;
/* Se obtiene el numero introducido por el usuario */

      cout << endl << endl << "Realizando la suma número " << i << ":" << endl;
      cout << "Se suma el número " << numero << " y " << suma;

     suma = suma + numero;
/* Se suman la variable para guardar el resultado de la suma y el número del usuario.

    cout << " y el resultado es " << suma << endl;
/* Se imprime el resultado de la suma */
      }

      else /* Si el número es menor a 0 */
      {
      cout << "El numero introducido no es positivo" << endl;
      --i; /* Se resta 1 a i para no contabilizar esta iteración del bucle for */
      }
   }

cin.get(); /* Pausa la consola para que no se cierre automáticamente. */
return 0; /* Retorna el control a la función principal */
}

Eso no me parece que funcione debidamente... No puedes primero comprobar que el número sea positivo y después pedir el número y sumarlo ya que la comprobación de que el número sea positivo tienes que realizarla, de una manera u otra, entre la petición del número y la suma.
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;

@XSStringManolo

Si perdón, hay que mover el cin>>numero antes del if, y en el if ponerle >=0 y ya funciona todo correctamente.

Mecanma

Aquí tienes la tarea hecha:

Código (cpp) [Seleccionar]

#include <iostream>
using std::cout;
using std::cin;

const int Elementos = 100;
typedef int tVector [Elementos];

int sumatorio(tVector v);



int main(){

tVector array;//arreglo de cien numero(vacio)
int cont = 0;//contador del bucle

cout<<"INGRESE CIEN NUMEROS POSITIVOS\n";

while(cont < 100){
cout<<"NUMERO "<<cont +1<<": ";
/*Al contador se le agrega uno para hacerlo agradable al usuario, recuerda: internamente usamos del 0 al 99
pero el usuario del 1 al 100*/
cin>>array[cont];

if(array[cont]<0){
cout<<"LOS NUMEROS DEBEN SER POSITIVOS\n";
}
else{
cont++;
}

}

long int suma = sumatorio(array);

cout<<"LA SUMA DE LOS CIEN NUMEROS ES: "<<suma<<"\n\n";




return 0;
}




int sumatorio(tVector v){

long int total=0;

for(int i = 0; i < Elementos ;i++){

total += v[i];

}

return total;
}