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

David de las Heras davidehm en gmail.com
Mie Mayo 25 00:38:32 CEST 2011


He intentado hacer un programa mezclando un poco lo que se pide en los
problemas 1 y 2 del tema 10 Arrays II.

La verdad es que después de dar mil vueltas, he acabado copiando el
algoritmo que implementa el método de la burbuja. Al menos creo que lo he
entendido bien, y creo que por fin le he pillado el truco a los bucles
anidados.

Pero al mostrar los valores ordenados, siempre me saca algún valor "raro" y
no sé por qué es debido.
Pongo el código fuente lo más comentado posible, por si me queréis ayudar:
#include <iostream>
using namespace std;

int main()
{
    short int i,j,contador=0;                           //Defino las
variables int
    float suma=0;                                           //Defino la
variable suma como float, para tener decimales
    cout <<"¿Cuántos valores quieres analizar?"<<endl;
    cin >> contador;                                        //La variable
"contador" será la cantidad de nº que compongan la serie
    float aux,vector[contador];
    cout << "Introduce valores " <<endl;                    //El bucle para
pedir números se repetirá tantas veces como
    for (i=0;i<contador;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" <<endl;               //Saco en
pantalla la serie introducida, en el órden de introducción
        for (i=0;i<contador;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 / contador <<endl;                         //La media es la
suma de los nº/por el nº de elementos de la serie (contador)
    for (i=contador-1;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 " <<endl;                 //Una vez
reasignados los índices, mostramos los valores ordenados

        for (j=0;j<=contador;j++)                           //Aquí he puesto
el bucle desde 0 hasta (contador-1) porque siempre me mete
                                                            //entre medias
algún valor raro, y de ésta forma completo el barrido de los índices
        {
        cout << vector [j] <<",";
        }

    return 0;
}
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20110525/6ab9d9a8/attachment.html>


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