[C con Clase] dudas con el siguiente codigo

Adrián Fernández msx68k en gmail.com
Dom Dic 9 22:58:19 CET 2012


Hola Franco, voy a responderte tratando de ser lo mas claro posible.

1-   Si quieres hacer las variables locales, (buena costumbre) debes
ponerlas luego de main(), asi:

int main()
{
    int valores[10],a, b,c,e,f,g,h;
    float d;
.....
Fijate que saqué los valores que les asignabas a   a y b; es mas claro
que los asignes justo antes de usarlos.
Además, como la variable d no va a contener un número entero sino real
(va a ser un número con decimales), le hice la declaración aparte.


No puedes declarar las variables dentro de los bucles!  Primero,
porque cuando haces:  while(a != 11)  , el tipo de a  ya debe existir
(y no existiría aún si la declarases dentro del bucle, porque todavía
no ingresó en él !).  Segundo, delcararlas dentro del bucle haría que
todas perdieran su valor en cada ciclo del mismo, por lo cual jamás
podrías hacer algo útil con ellas. (por todo eso es que el compilador
no te deja hacer este tipo de cosas).

2-   El total de la suma debería estar en c, pero fijate que nunca
haces algo como:  c = c + valores[b]; con lo cual c iría acumulando el
resultado de las sucesivos valores del array.
Además, observa que haces:  valores[b] = 0 + b;  esto pone en cada
celda del array el valor de b, sobreescribiendo el valor que estaba
almacenado (que era el que se ingresó por teclado).
Por último el límite del while está pasado en 1.  O sea que el while
debe preguntar por  b != 10  en vez de  b != 11, ya que el subíndice
del array va del 0 al 9.
Te muestro tu código y a continuación las modificaciones necesarias
para que lo veas todo junto:

*****Tu código*****
    b=0;
    while(b!=11)
    {
                valores[b]=0+b;
                c=valores[b]+0;
                b++;
    }
    cout<<endl<<"la suma de todos es: "<< c;

*****Modificación*****
    b = 0;
    c = 0;
    while(b!=10)
    {
                c=valores[b]+c;
                b++;
    }
    cout<<endl<<"la suma de todos es: "<< c;


En cuanto al promedio, no obtienes un valor correcto porque estas
trabajando siempre con valores enteros. Debes hacer que la variable
que recibe el valor promedio sea de tipo float para que conserve los
valores mas allá del punto decimal. También se debe dividir por 10.0
y no por 10  .Con esto el compilador sabe que debe hacer un cáclulo de
números reales y no enteros.
O sea que quedaría algo como:

    d = c/10.0;  //d está definida al principio como de tipo float.
    cout<<endl<<"el valor promedio es: "<<d;


Con respecto a obtener el número mayor, hay varias cosas a corregir:

Primero:  el valor de   a  llega a valer 10, lo cual lo lleva mas alla
del permitido por el array. Recorda que un array de 10 posiciones
tiene subindices de 0 al 9.
Entonces:  while((b!=10)&&(a!=11))
debe reemplazarse por:  while((b!=10)&&(a!=10))

Segundo:   Nuevamente te cepillas el pobre array con los valores de b
y a. Haces:  valores[b]=0+b;  valores[a]=0+a;  ¡horror!
Simplemente esas líneas no van.

Tercero:   Todo indica que inventaste una nueva forma de instrucción
IF, pero el compilador aún no lo sabe :)
En tu código pusiste la condición del IF y las instrucciones a
ejecutar dentro del mismo paréntesis:

                if
                (
                               (valores[b])>(valores[a]);
                               e=valores[b];
                               a++;
                )
                else
                (
                    b++;
                    f=valores[a];
                )

El IF tiene la forma:
    if (condicion)
        { ejecuta si condicion es verdadero }
    else
        { ejecuta si condicion es falso }


Cuarto:   Usas dos variables: e y f   para contener el valor mayor del
array.  No es necesario usar dos variables, porque sólamente se
necesita guardar un solo valor (además el IF tiene el mismo problema
de construcción que anteriormente):
    if
    {
    e>=f;
    cout<<endl<<"el numero mayor es: "<<e;
    }
    else
    {
        cout<<"el numero mayor es: "<<f;
    }


Entonces, el código para obtener y mostrar el número mayor quedaría:

    /*ahora a calcular el numero mayor*/
    b=0; e=0; f=0;
    a=1;
    while((b!=10) && (a!=10))
    {
                if (valores[b] > valores[a])
                {
                    e = valores[b];
                    a++;
                }
               else
	       {
                  e = valores[a];
                  b++;
               }
    }
    cout<<endl<<"el numero mayor es: "<<e;

Todo lo mismo vale para la obtención del menor número.

Bueno, espero haberte podido ayudar.


El día 9 de diciembre de 2012 02:17, FRANCISCO SANTIBAÑEZ ALONSO
<pandoras_box_789 en hotmail.com> escribió:
> el objetivo de este programa es crear un array de 10 elementos luego el
> usuario da 10 numeros enteros y el programa los debe guardar en el array y
> de ahi calcular la suma de todos el promedio el mayor numero y el menor
> tenog estas dudas
> 1.- como declaro variables dentro de los bucles???(asi no tengo nesecidad de
> que sean globales ya que solo las nesecito dentro del bucle y ya
> 2.-esta bien mi programa??(es que lo ejecuto y solo me sale 10 0 55 en la
> suma y 1 o 5 en promedio)
> 3.-despues de que agregue las intrucciones para calcular el numero mayor ya
> no me copila porque??? que le falta???
> gracias por su ayuda se aceptan sugerencias aqui esta el codigo(uso
> dev-c++):
>
>
> #include <iostream>
> #include <cstdio>
> #include <cstdlib>
> #include <conio.h>
> using namespace std;
>
> int valores[10],a=1,b=0,c,d,e,f,g,h;
>
> int main()
> {
>     while(a!=11)
>     {
>                  cout<<endl<<"ingrese " << a <<" numero:";
>                  a+=1;
>                  valores[b]=0+b;
>                  cin>>valores[b];
>                  b=b+1;
>     }
>     /*hasta ahora tenemos los diez valores guardados en el array lo que
> sigue es mostrar  la suma de todos*/
>     b=0;
>     while(b!=11)
>     {
>                 valores[b]=0+b;
>                 c=valores[b]+0;
>                 b++;
>     }
>     cout<<endl<<"la suma de todos es: "<< c;
>     /*ahora el valor promedio*/
>     d=c/10;
>     cout<<endl<<"el valor promedio es: "<<d;
>     /*ahora a calcular el numero mayor*/
>     b=0;
>     a=1;
>     while((b!=10)&&(a!=11))
>     {
>                 valores[b]=0+b;
>                 valores[a]=0+a;
>                 if
>                 (
>                                (valores[b])>(valores[a]);
>                                e=valores[b];
>                                a++;
>                 )
>                 else
>                 (
>                     b++;
>                     f=valores[a];
>                 )
>     }
>     if
>     {
>     e>=f;
>     cout<<endl<<"el numero mayor es: "<<e;
>     }
>     else
>     {
>         cout<<"el numero mayor es: "<<f;
>     }
>     /*ahora a calcular el numero menor*/
>     b=0;
>     a=1;
>     while((b!=10)&&(a!=11))
>     {
>                 valores[b]=0+b;
>                 valores[a]=0+a;
>                 if
>                 (
>                                (valores[b])<(valores[a]);
>                                g=valores[b];
>                                a++;
>                 )
>                 else
>                 (
>                     b++;
>                     h=valores[a];
>                 )
>     }
>     if
>     {
>     g<=h;
>     cout<<endl<<"el numero menor es: "<<g;
>     }
>     else
>     {
>         cout<<"el numero menor es: "<<h;
>     }
>     getch();
> }
>
>
>
>
> intento que el programa sea lo mas claro posible por eso talvez  noten
> muchos espacios.....
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ




Más información sobre la lista de distribución Cconclase