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

Steven Davidson srd4121 en njit.edu
Mie Mayo 25 04:00:27 CEST 2011


Hola David,

On 5/24/11, David de las Heras <davidehm en gmail.com> wrote:
>

[CORTE]

> 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:

Veamos el código fuente.

> #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];

Esto no es correcto. La cantidad máxima de elementos al definir un
array DEBE ser constante. Esto significa que el compilador debe saber
la cantidad de elementos del array (estático).

Si quieres crear el array en tiempo de ejecución, entonces usa un
array dinámico. Sin embargo, para los ejercicios del capítulo 10 esto
no es necesario. Simplemente indica la cantidad máxima de elementos y
luego usa 'contador' como la cantidad actual. Obviamente, necesitas
verificar que el valor de 'contador' es válido.

[CORTE]

>     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

Necesitas que 'j' no llegue a 'i', porque también usamos 'j+1' como
índice. Esto es,

for( j=0; j<i; j++ )

> é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

Esto no es correcto. El operador debería ser < esto es,

for( j=0; j<contador; j++ )

> 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;
> }
>


Espero haber aclarado las dudas.

Steven




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