[C con Clase] Tema 10. Arrays II. No me sale la propuesta 1 y 2

dehm davidehm en gmail.com
Vie Mayo 27 12:07:08 CEST 2011


Bueno:

Siguiendo con el ejercicio, mezclando un poco lo pedido en los problemas 1 y 2, he aquí mi propuesta. Pero antes unas dudas:
Entiendo que cuando se pide mostrar la serie de mayor a menor (después de haberla mostrado de menor a mayor) lo que se está pidiendo es que se reordenen los índices del array para que al más pequeño le corresponda el mayor valor y así sucesivamente.
Yo lo he hecho así, pero también limitándome a mostrar la información a la inversa, sin tocar el valor de los índices.
La pregunta es....en un programa real, no será más fácil limitarse a mostrar la información al revés. Lo digo porque así el programa tendrá que hacer menos cálculos y eso repercutirá en la velocidad del programa, ¿no?

Y la otra cosa....no sé como hacer que me salgan las series separadas por la coma "," pero sin que salga la última coma:
Ahora me sale:
a,b,c,d,
y debería ser:
a,b,c,d


Y el código:
#include <iostream>
using namespace std;

int main()
{
    short int i,j;                           //Defino las variables int
    float suma=0;                                           //Defino la variable suma como float, para tener decimales
    float aux,vector[4];
    cout << "Introduce 5 valores " <<endl;          //El bucle para pedir números se repetirá tantas veces como
    for (i=0;i<5;i++)                                //le haya marcado la variable contador
    {
    cin >>vector [i];
    suma = suma + vector [i];                          //Voy actualizando la variable "suma" sumando cada elemento del vector
    }
    cout << "La serie introducida es: ";               //Saco en pantalla la serie introducida, en el órden de introducción
        for (i=0;i<5;i++)
        {
        cout << vector [i]<<",";
        }
    cout <<endl;
    cout << "La suma es: ";
    cout << suma <<endl;                                    //La variable "suma" ya la tenía actualizada. La saco por pantalla
    cout << "La media es: ";
    cout << suma / 5 <<endl;                         //La media es la suma de los nº/por el nº de elementos de la serie (contador)
    for (i=4;i>0;i--)                             //Empiezo un bucle que va desde el último índice del vector hasta el 0
        {for (j=0;j<i;j++)                                 //De ésta forma éste bucle empieza en 0 y acaba en el último índice del vector
                                                            //disminuyendo en una unidad en cada iteración del pincipal

            if (vector[j]>vector[j+1])                      //Si el valor del primer índice es mayor que el del siguiente inmediato
            {
            aux=vector[j];                                  //Cambio los valores apoyándome en una variable auxiliar "aux" para poder
            vector[j]=vector[j+1];                         //traspasar dichos valores
            vector[j+1]=aux;
            }
        }
    cout << "La serie ordenada es: ";                 //Una vez reasignados los índices, mostramos los valores ordenados

        for (j=0;j<5;j++)                              //Con los índices reasignados, los muestro en un bucle que va de 0 a 9 (10 valores)

        {
        cout << vector [j] <<",";
        }
    cout <<endl;
    cout << "El mayor número de la serie es: " <<vector [4] <<endl;
    cout << "El menor número de la serie es: " <<vector [0] <<endl;

    //Ahora muestro los números a la inversa
    //Método "atajo" (me limito a mostrar los números en órden inverso)

    cout <<"la serie a la inversa es (método cutre): ";
        for (j=4;j>=0;j--)
            {
                cout <<vector [j]<< ",";
            }
    cout <<endl;

    //Método "reordenación de índices"
    //(Ahora el índice 0 corresponderá al mayor valor y el 4 al menor)

        for (j=4;j>=0;j--)      //bucle desde 4 hasta 0 decreciendo en una unidad en cada iteración

            for (i=0;i<j;i++)   //bucle desde 0 hasta j (primero de 0 a 4, luego de 0 a 3, etc...)

                if (vector [i]<vector [i+1])
                    {
                        aux=vector [i];
                        vector [i]=vector [i+1];
                        vector [i+1]=aux;
                    }

        cout <<"La serie a la inversa es (método cambiar los indices): ";
        for (j=0;j<5;j++)
        cout <<vector [j]<<",";
    return 0;
}


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