Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Ayuda programa simple

Estas en el tema de Ayuda programa simple en el foro de C/C++ en Foros del Web. Haber si me podéis ayudar, quiero hacer un programa que recoja un total de 10 valores del teclado y halle el valor medio, la suma ...
  #1 (permalink)  
Antiguo 30/07/2008, 07:56
 
Fecha de Ingreso: julio-2008
Mensajes: 9
Antigüedad: 15 años, 9 meses
Puntos: 0
Ayuda programa simple

Haber si me podéis ayudar, quiero hacer un programa que recoja un total de 10 valores del teclado y halle el valor medio, la suma de todos y además que muestre el valor mayor y el menor. Yo lo he hecho así, pero tengo una serie de problemas que no doy solucionado:

Código:
#include <iostream>
using namespace std;

int main() 
{
    double valores [10];
    
    cin >> valores [0];
    cin >> valores [1];
    cin >> valores [2];
    cin >> valores [3];
    cin >> valores [4];
    cin >> valores [5];
    cin >> valores [6];
    cin >> valores [7];
    cin >> valores [8];
    cin >> valores [9];
    cin.get();
    cin.get();
    
    double x = valores [0] + valores [1] + valores [2] + valores [3] + valores [4] + valores [5] + valores [6] + valores [7] + valores [8] + valores [9];
    
    cout << "La suma de los valores es: " << x <<endl;

    cout << "El valor medio es: " << x/10 <<endl;

    double y;
    int z=2;
    int m=11;
    
    if (valores [0] >= valores [1]) y = valores [0]; 
    else y = valores [1];
    
    do
{
    if (y <= valores [z]) y=valores [z];
    z++; 
    m--;

}
    while (m<=11); 
    
    cout << "El valor mayor es: " << y <<endl;         


    double q;
    int r=2;
    int n=11;
    
    if (valores [0] <= valores [1]) q = valores [0]; 
    else q = valores [1];
    
    do
{
    if (q >= valores [r]) y=valores [r];
    r++; 
    n--;

}    
    while (n<=11); 
    
    cout << "El valor menor es: " << q <<endl;  

cin.get();
cin.get();
              
    return 0;
}
Los problemas que tengo son:
1- El programa se cierra tras introducir los valores sin dar tiempo a ver los resultados, a pesar de los cin.get();
2- A pesar de que pongo 10 valores al array, el programa me pide 11

¿Habría una forma más "elegante" de hacerlo con este nivel de conocimientos?

Nota: pongo variables double para evitar problemas, ya que es un programa didáctico.
  #2 (permalink)  
Antiguo 30/07/2008, 08:12
 
Fecha de Ingreso: febrero-2008
Mensajes: 42
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: Ayuda programa simple

Hola, como andas... Te recomiendo utilizar vectores en vez de arrays... es mas dinamico. Y ahora estoy un poco complicado en el trabajo mas tarde le pego una leida al codigo y veo como ayudarte. Cuidate!
  #3 (permalink)  
Antiguo 30/07/2008, 08:25
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: Ayuda programa simple

Creo que el programa enviado, en vez de repetirse 11 veces, como dices, deberia quedarse en un ciclo infinito, excepto que haya algo adicional que no advierto ahora.

En el ciclo, m parte en 11 y se decrementa, la condicion testeada no deberia ser

do
{
// ...

} while (m<=11);

porque sino ese ciclo seguira por siempre (hasta una iteracion mas que el minimo nro negativo).
  #4 (permalink)  
Antiguo 30/07/2008, 08:25
 
Fecha de Ingreso: julio-2008
Mensajes: 9
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Ayuda programa simple

Hola, gracias por contestar Rapidiablo. Veras, estoy aprendiendo a programar y todavía no he visto nada referente a vectores, sin embargo acabo de hacer una busqueda en el curso que estoy siguiendo, y no hay nada. ¿Puede venir con otro nombre? ¿Que hacen exactamente? Gracias
  #5 (permalink)  
Antiguo 30/07/2008, 08:39
 
Fecha de Ingreso: julio-2008
Mensajes: 9
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Ayuda programa simple

CalgaryCorpus tienes razón, no entiendo muy bien lo que quieres decir, pero repasandolo un par de veces me he dado cuenta de que habia interpretado mal lo que hacia y en realidad debería ser:

Código:
    double y;
    int z=2;
    int m=8;
    
    if (valores [0] >= valores [1]) y = valores [0]; 
    else y = valores [1];
    
    do
{
    if (y <= valores [z]) y=valores [z];
    z++; 
    m--;

}
    while (m>=0); 
    
    cout << "El valor mayor es: " << y <<endl;
De esta forma, el bucle se repite 8 veces exactas que son las que necesita para comparar el resto de digitos ya que parte del segundo por la linea:

Código:
    if (valores [0] >= valores [1]) y = valores [0]; 
    else y = valores [1];
Lo he compilado y funciona, sin embargo sigue pidiendome 11 valores.
  #6 (permalink)  
Antiguo 30/07/2008, 08:53
 
Fecha de Ingreso: julio-2008
Mensajes: 9
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Ayuda programa simple

He observado algo curioso que puede que sea la respuesta, cuando al iniciar el programa me pide los 11 valores, puedo introducir cualquiera en los 10 primeros, pero el número 11 no puede pasar de 9, sino se cierra. Quizá alguno sepa de que se trata. Gracias.
  #7 (permalink)  
Antiguo 02/08/2008, 09:27
Avatar de WaRc3L  
Fecha de Ingreso: agosto-2008
Ubicación: My House
Mensajes: 89
Antigüedad: 15 años, 9 meses
Puntos: 1
Respuesta: Ayuda programa simple

Código:
    double valores [10];
    
    cin >> valores [0];
    cin >> valores [1];
    cin >> valores [2];
    cin >> valores [3];
    cin >> valores [4];
    cin >> valores [5];
    cin >> valores [6];
    cin >> valores [7];
    cin >> valores [8];
    cin >> valores [9];
Si fueran mas de 1000 valores, que harias???? creo que lo que tienes que hacer es estalviar codigo. Con un bucle while o for es facil.

Código:
for ( int i = 0; i < 10; i++)
{
      cin >> valores[i];
}
Creo que asi es mas facil... y solo tienes que poner 2 zeros atras del 10 xD
  #8 (permalink)  
Antiguo 02/08/2008, 09:37
 
Fecha de Ingreso: julio-2008
Mensajes: 9
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Ayuda programa simple

Gracias WaRc3L, pensandolo un poco, también se me ocurrio más tarde :P pero estoy aprendiendo xD
Bueno, ya he solucionado el problema que comentaa, gracias a todos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:36.