Algoritmo para invertir un array C++

Iniciado por seryioo, 6 Agosto 2015, 10:23 AM

0 Miembros y 1 Visitante están viendo este tema.

seryioo

Buenas, quiero invertir un array de manera que la posicion vec[0] sea la vec[dim], vec[1] sea vec[dim-1], etc. Pensaba que no iba a ser un problema pero al parecer no me funciona. Echadle un vistazo por favor.

Código (cpp) [Seleccionar]

void invertir(Tvector vec, unsigned dim){
    for(unsigned i=0; i<dim; ++i){
        vec[i]=vec[dim-i];
    }
}


Gracias.

engel lex

supongamos que vec[8] = {1,2,3,4,5,6,7,8}, dim será 8

tu código hará


i = 0; vec[0]=1; 8-0 = 8; vec[8]

listo en el primer ciclo tienes error... debe ser dim-i-1

ahora asumiendo ese cambio
i = 0; vec[0]=1; 8-0-1 = 7; vec[7]=8
vec = {8,2,3,4,5,6,7,8}
i = 1; vec[1]=2; 8-1-1 = 6; vec[6]=7
vec = {8,7,3,4,5,6,7,8}


ya deberías ver el error en tu código... siempre es bueno repasar esos códigos a mano

puedes hacer
Código (cpp) [Seleccionar]
for(unsigned i=0; i<dim/2; ++i){
        aux = vec[i];
        vec[i]=vec[dim-i-1];
        vec[dim-i-1] = aux;
    }


en este caso será
i = 0; vec[0]=1; 8-0-1 = 7; vec[7]=8
vec = {8,2,3,4,5,6,7,1}
i = 1; vec[1]=2; 8-1-1 = 6; vec[6]=7
vec = {8,7,3,4,5,6,2,1}
i = 2; vec[2]=3; 8-2-1 = 5; vec[5]=6
vec = {8,7,6,4,5,3,2,1}
i = 3; vec[3]=4; 8-3-1 = 4; vec[4]=5
vec = {8,7,6,5,4,3,2,1}

aquí termina (porque i es 4, que no es menor que 8/2)
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.