Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: lukaszg_15 en 16 Marzo 2014, 19:57 PM

Título: Duda
Publicado por: lukaszg_15 en 16 Marzo 2014, 19:57 PM
me he bloqueado un poco en esta pregunta y queria saber si me podriais ayudar :

Escribir  un  programa  que,  después  de  preguntar  cuántos  números  se  van  a
introducir,  pida  esos  números  y  devuelva  su  media  aritmética,  el  mayor  y  el
menor. El programa debe controlar que la cantidad de números es mayor de 2 y
en caso contrario ha de mostrar un mensaje de error.



Se hacer practicamente todo quitando lo primero, lo de cuantos numeros quieres y luego escribir esos numeros, yo lo he estado intentando hacer con arrays pero nunca me sale lo que le estoy pidiendo, alguno podria ayudarme? seguramente sea un ejercicio facil para muchos.
Título: Re: Duda
Publicado por: engel lex en 16 Marzo 2014, 20:18 PM
por favor publica tu codigo, no te lo van a entregar listo, muestra lo que llevas, colocas un comentario donde tengas la duda y así vamos :P
Título: Re: Duda
Publicado por: lukaszg_15 en 16 Marzo 2014, 20:40 PM
yo tengo algo asi pero me esta dando error todo el rato :

#include<iostream>
#include<cstdlib>
#include<fstream>

using namespace std;

int main ()
{
   int num,media,suma,numeros[num],aux;
   
   cout << "Cuantos numeros va a introducir? ";
   cin >> num;
   cout << "Escriba los numeros: ";
   cin >> numeros[num];
   
   
  for(int i=0;i<num;i++){
          suma = suma + numeros[num];
          media = suma / num;
          cout << "La media es: "<< media<< endl;
         
          {
if( numeros[num]>numeros[i+1])
{
aux=numeros[i];
numeros[i]= numeros[i+1];
numeros[i+1]=aux;
          }
          cout << "ascendente: ";
for(i=1;i<=num;i++)
{
cout<<","<<numeros[i];
}
cout << "\ndecendente: ";
for(i=num;i>=1;i--)
{
cout<<","<<numeros[i];
}



system ("pause");
return 0;

}
Título: Re: Duda
Publicado por: amchacon en 16 Marzo 2014, 21:02 PM
¿Lo estás haciendo aposta para que te hagamos la tarea? :huh:

Vale que los novatos cometen errores, pero esque ahí hay como una línea por error.

De momento:
Código (cpp) [Seleccionar]
cout << "Escriba los numeros: ";
cin >> numeros[num];


No puedes hacer eso, los arrays se escriben valor a valor. Tienes que irlo recorriendo con un for:
Código (cpp) [Seleccionar]
for (int i = 0; i < num;i++)
{
    cin>>numeros[i];
}


Lo mismo con la suma, hay que hacerla elemento a elemento con un for.

Y hasta ahí puedo llegar. Reescribe el código desde cero, probablemente te des cuenta que algunas cosas no concuerdan. Si sigues teniendo dudas postea.

Y repasate los arrays anda :(

Saludos.
Título: Re: Duda
Publicado por: engel lex en 16 Marzo 2014, 21:11 PM
tienes que estár más pendiente al hacer el codigo... veo un montón de errores y es básicamente una perdida de tiempo intentar arreglarlo... mira este

inicias tus variables, ingresas el primer numero y mayor, menor, y media son iguales a ese primer numero, luego te vienes y completas con un for así... sin arrays...
Código (cpp) [Seleccionar]

    for(aux=1;aux<num;aux++){
        cout << "ingrese el siguiente numero: ";
        cin >> ingresado;
        if(ingresado<menor) menor = ingresado;
        if(ingresado>mayor) mayor = ingresado;
        media += ingresado;
    }
Título: Re: Duda
Publicado por: lukaszg_15 en 16 Marzo 2014, 21:15 PM
vale gacias voy a reescribir el codigo .

amchacon era eso lo que me tenia un poco preocupado que sabia que lo estaba haciendo mal pero no sabia hacerlo bien.

engelx lo siento intentare repasarme 5 veces las cosas antes de preguntar pero esque estaba muy estresao con este ejercicio, espero que ahora me pueda salir,
Título: Re: Duda
Publicado por: lukaszg_15 en 17 Marzo 2014, 16:04 PM
he conseguido hacer esto, lo tengo todo hecho y bien pero no como quiero, la suma esta hecha para 3 numeros de array pero si el usuario quiere mas me daria error o el resultado de los 3 primeros, como hariais para hacer esa suma sin saber cuantos numeros de array habra?

#include<iostream>
#include<cstdlib>
#include<fstream>

using namespace std;

int main ()
{
    int num,numeros[num],suma,media,suma1,suma2;
   
    cout << "Cuantos numeros va a introducir? ";
    cin >> num;
   
   
    if (num > 2){
    cout << "Introuducelos: ";
    for (int i = 0; i < num;i++){
        cin>>numeros[i];}
       
        for (int i = 0; i< num; i++){
            suma = 0;
            suma1 = 0;
            suma2 = 0;
            suma = suma + numeros[0];
            suma1 = suma1 + numeros[1];
            suma2 = suma2 + numeros [2];
            media = (suma + suma1 + suma2) /num;
            }
            cout << "La media es: "<< media<< endl;
            }
           else
            {
                cout << "Debe introducir mas de 2 numeros."<<endl;
                }
           

system ("
Título: Re: Duda
Publicado por: eferion en 17 Marzo 2014, 16:24 PM
Si tienes los números en un array... recorre el array y ve sumando sus elementos.

Y si sabes cuántos elementos hay en el array... el valor lo tienes almacenado en la variable "num".

Pero vayamos por partes.

Código (cpp) [Seleccionar]

for (int i = 0; i< num; i++)
{
 suma = 0;
 suma1 = 0;
 suma2 = 0;
 suma = suma + numeros[0];
 suma1 = suma1 + numeros[1];
 suma2 = suma2 + numeros [2];
 media = (suma + suma1 + suma2) /num;
}

cout << "La media es: "<< media<< endl;


Este código no tiene ningún sentido... es decir, calculas "num" veces la "media" de los 3 primeros elementos... digo "media" porque divides entre "num" pese a no sumar los "num" elementos... además si "explotas" la linea "media=..." queda algo tal que...


media = (suma + suma1 + suma2 ) num;

// suma = suma + numeros[0] = 0 + numeros[ 0 ] = numeros[ 0 ]
media = ( numeros[0] + suma1 + suma2 ) / num;

// suma1 = suma1 + numeros[ 1 ] = 0 + numeros[ 1 ] = numeros[ 1 ]
media = ( numeros[ 0 ] + numeros[ 1 ] + suma2 ) / num;

// suma2 = suma2 + numeros[ 2 ] = 0 + numeros[ 2 ] = numeros[ 2 ]
media = ( numeros[ 0 ] + numeros[ 1 ] + numeros[ 2 ] ) / num;


Te sobran así a bote pronto la mitad de las variables!!! Si al menos tener tantas variables sirviese para que el código fuese más legible tendría alguna excusa... pero es que su efecto es justo el contrario.

La solución que buscas es sencilla. Simplemente fíjate en cómo has elaborado el código que pide los datos al usuario. Cuando estás pidiéndole los diferentes números, para almacenarlos haces...

Código (cpp) [Seleccionar]

for (int i = 0; i < num;i++)
  cin >> numeros[ i ];


... luego para sumarlos todos has de hacer más o menos lo mismo. Es decir, necesitas un bucle de 0 a "num" y aprovechas ese bucle para acceder a todos los elementos del array y sumarlos.

Código (cpp) [Seleccionar]

int suma = 0;
for( int i=0; i<num; i++ )
 suma += numeros[i];

media = suma / num;


Y esto mismo aplicado a tu código...

Código (cpp) [Seleccionar]

#include<iostream>
#include<cstdlib>
#include<fstream>

using namespace std;

int main ()
{
 int num,numeros[num];
   
 cout << "Cuantos numeros va a introducir? ";
 cin >> num;
   
   
 if (num > 2)
 {
   cout << "Introducelos: ";
   for (int i = 0; i < num;i++)
     cin>>numeros[i];
 
   int suma = 0;  
   for (int i = 0; i< num; i++)
     suma += numeros[ i ];

   int media = suma / num;
   cout << "La media es: "<< media<< endl;
 }
 else
    cout << "Debe introducir mas de 2 numeros."<<endl;
}


Ah si, procura tabular bien el código... si no es bastante molesto leerlo y le quitas a la gente las ganas de ayudarte ( si no leen tu código porque les parece incomprensible no te van a responder ).
Título: Re: Duda
Publicado por: engel lex en 17 Marzo 2014, 16:26 PM
para que haces un ciclo si lo haces directamente? xD

te recomiendo algo, instala dev c++, rga tu.códigos, y haces un debug, al ver como tu códigos se comporta linea a linea entenderas tus errores :p

(si alguien conoce un debugger mas practico, que avise)
Título: Re: Duda
Publicado por: lukaszg_15 en 17 Marzo 2014, 16:41 PM
perdon por el codigo lo hare mas legible la proxima vez.


Pero es que yo en un principio estaba haciendo exactamente lo mismo que me has puesto, ademas calcado porque  lo vi en otras paginas que tenian un problema parecido, pero es que a mi me sigue dando error, en vez de hacerme la suma y luego  la media el compilador hace lo que quiere. por ejemplo :

pongo que quiero 3 numeros que son 3,4,5.

me salen 3 mensajes en vertical que ponen :
La media es: 1
La media es : 2
La media es : 4.

por eso pense que lo estaba haciendo mal pero veo que lo tenia bien. Puede ser algun bug del compilador o algo? tengo el dev c++.

ah y si saco el cout del ciclo for es peor me sale un mensaje :

La media es: 2293672  :o

Lo siento por ser tan pesado pero es que no entiendo este error, porque en todos los lados es la misma respuesta pero a mi me sigue dando error.

Título: Re: Duda
Publicado por: lukaszg_15 en 17 Marzo 2014, 16:44 PM
me he dado cuenta de que en el tercer mensaje si que hace la media bien.

pero habria alguna forma de quita los primeros 2 mensajes?
Título: Re: Duda
Publicado por: leosansan en 17 Marzo 2014, 16:47 PM
Cita de: eferion en 17 Marzo 2014, 16:24 PM

Y esto mismo aplicado a tu código...

Código (cpp) [Seleccionar]

#include<iostream>
#include<cstdlib>
#include<fstream> <== ESTA CREO ESTA DE MAS

using namespace std;

int main ()
{
 int num,numeros[num]; <==DECLARAS EL ARRAY ANTES DE INTRODUCIR LA DIMENSION num
<== falta declarar las otras variables
   ....................................................
}


Ah si, procura tabular bien el código... si no es bastante molesto leerlo y le quitas a la gente las ganas de ayudarte ( si no leen tu código porque les parece incomprensible no te van a responder ).

Totalmente de acuerdo en lo último.

El código corregido:


Código (cpp) [Seleccionar]

#include<iostream>
#include<cstdlib>

using namespace std;

int main (){
    int num;
    float media,suma=0;
    cout << "Cuantos numeros va a introducir: ";
    cin >> num;
    int numeros[num];
    if (num > 2){
    for (int i = 0; i < num;i++){
      cout << "numero "<< i+1<<" de "<< num<<": ";
      cin>>numeros[i];
      suma+=numeros[i];
    }
    media=suma/num;
    cout << "La media es: "<< media<< endl;
    }
    else
      cout << "Debe introducir mas de 2 numeros."<<endl;
    system ("pause");
    return 0;
}


Supongo que lo has hecho a posta para que él trabaje algo.

¡¡¡¡ Saluditos! ..... !!!!


(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)


Título: Re: Duda
Publicado por: eferion en 17 Marzo 2014, 16:54 PM
Jajajajaja

Un despiste con el copypaste... me dio por reorganizar un poco más el código una vez compilado y no me di cuenta de ese detalle.

Pero sí, la idea de venderlo como hecho aposta para que la gente se lo tenga que currar en casa también es un buen motivo.

PD.: dejarle la media en float no crees que dejarlo demasiado mascado??
Título: Re: Duda
Publicado por: leosansan en 17 Marzo 2014, 16:59 PM
Cita de: eferion en 17 Marzo 2014, 16:54 PM
Jajajajaja
....................................
PD.: dejarle la media en float no crees que dejarlo demasiado mascado??


¿Y crees que con los no conocimientos que demuestra sería capaz de hacer un cast? :laugh: :laugh: :laugh:

¡¡¡¡ Saluditos! ..... !!!!


(http://st.forocoches.com/foro/images/smilies/dancer2.gif)
Título: Re: Duda
Publicado por: lukaszg_15 en 17 Marzo 2014, 17:05 PM
muchas gracias a todos por las respuestas, ya se que soy muy inutil sobretodo en arrays pero he venido a aprender y me habeis ayudado mucho  :-*

ahora ademas de aprender a hacerlo tambien vere los errores mas facilmente hehe bueno pues a acabar el ejercicio se ha dicho  :rolleyes:
Título: Re: Duda
Publicado por: eferion en 17 Marzo 2014, 17:24 PM
Cita de: lukaszg_15 en 17 Marzo 2014, 17:05 PM
muchas gracias a todos por las respuestas, ya se que soy muy inutil sobretodo en arrays pero he venido a aprender y me habeis ayudado mucho  :-*

ahora ademas de aprender a hacerlo tambien vere los errores mas facilmente hehe bueno pues a acabar el ejercicio se ha dicho  :rolleyes:

Si me aceptas un consejo... si quieres vivir de esto algún día, intenta que tu objetivo sea siempre hacer bien las cosas, comprendiendo y razonando la solución. Si al final tiras por la vía fácil de intentar que nosotros (o cualquiera) te resuelva la papeleta para presentar el ejercicio funcionando luego te va a costar bastante subirte al tren y vas a lamentar las ocasiones perdidas.
Título: Re: Duda
Publicado por: lukaszg_15 en 17 Marzo 2014, 23:24 PM
Cita de: eferion en 17 Marzo 2014, 17:24 PM
Si me aceptas un consejo... si quieres vivir de esto algún día, intenta que tu objetivo sea siempre hacer bien las cosas, comprendiendo y razonando la solución. Si al final tiras por la vía fácil de intentar que nosotros (o cualquiera) te resuelva la papeleta para presentar el ejercicio funcionando luego te va a costar bastante subirte al tren y vas a lamentar las ocasiones perdidas.

gracias por el consejo,eso intento pero los comienzos pienso que nunca son faciles, pero siempre cuando alguien me explica algo o me pone como es pues no suelo copiarlo y pegarlo y a otra cosa, me gusta analizar la razon por la que a puesto cada cosa hasta entenderlo todo y saber mis fallos.

Una duda creeis que podria aprender a programar muy bien en 1 año digamosle echando 5 horas diarias? me encanta esto y me gustaria ponerle algun tipo de objetivo para motivarme mas.
Título: Re: Duda
Publicado por: eferion en 18 Marzo 2014, 08:29 AM
No debes confundir el saber programar en un lenguaje con saber programar.

Haciendo ejercicios de C, aprenderás a programar en C, pero no aprenderás a programar.

Aprender a programar es independiente del lenguaje empleado y es algo que se aprende sobretodo estudiando ( entendiendo la arquitectura de un ordenador, cómo se ejecutan las instrucciones, cómo funciona la reserva de memoria, diferencias entre heap y pila, ... )

Una vez sabes programar, controlar un lenguaje nuevo es cuestión de cogerse un manual e invertir unos días en conocer las reglas y estructuras del nuevo lenguaje.
Título: Re: Duda
Publicado por: amchacon en 18 Marzo 2014, 13:25 PM
Cita de: eferion en 18 Marzo 2014, 08:29 AM
No debes confundir el saber programar en un lenguaje con saber programar.

Haciendo ejercicios de C, aprenderás a programar en C, pero no aprenderás a programar.
Depende del ejercicio, no estoy de acuerdo.

Para programar no es necesario saber como funciona la arquitectura de ordenador, yo puedo programar a alto nivel y despreocuparme de eso.

Lo importante es tener buena capacidad para resolver problemas y familiarizarte con la sintaxis de los lenguajes. Resolver problemas te hará más hábil para resolver otros, el usar C o no es irrelevante.
Título: Re: Duda
Publicado por: eferion en 18 Marzo 2014, 13:35 PM
Cita de: amchacon en 18 Marzo 2014, 13:25 PM
Para programar no es necesario saber como funciona la arquitectura de ordenador, yo puedo programar a alto nivel y despreocuparme de eso.

Efectivamente puedes despreocuparte, pero si no sabes cómo funciona difícilmente vas a poder entender el mecanismo, por ejemplo, mediante el cual "funcionan" los objetos o el mecanismo que regula el uso de memoria... y si no sabes eso podrías acabar con problemas de lagunas (C++) o sin memoria en el equipo ( C#, Java ) y no tener ni idea del motivo ni como solucionarlo.

Cita de: amchacon en 18 Marzo 2014, 13:25 PM
Lo importante es tener buena capacidad para resolver problemas y familiarizarte con la sintaxis de los lenguajes. Resolver problemas te hará más hábil para resolver otros, el usar C o no es irrelevante.

Totalmente de acuerdo... como dices, usar o no C es irrelevante... de hecho, debe ser irrelevante. Esa es la idea que intentaba transmitir, que saber programar no debe ir ligado a un lenguaje en concreto.