problema con array de punteros a cadenas

Iniciado por MessageBoxA, 10 Julio 2014, 23:27 PM

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

CalgaryCorpus

Me debo haber expresado mal: No solo digo que el problema se puede resolver sin usar punteros, y veo que estas de acuerdo, sino que en el codigo propuesto previamente (que repito a continuacion) ...

Código (cpp) [Seleccionar]
 int mayor_= 0, menor_= 0;
 mayor = votos[0];
 menor = votos[0];
 posicion1 = &mayor_, posicion2 = &menor_;
 for( contador = 1 ; contador < 4 ; contador++ ){
   if ( votos[contador] > mayor){
mayor_= contador ;
mayor = votos[mayor_];
posicion1 = &mayor_;
   }
   else{
menor_= contador ;
menor = votos[menor_];
posicion2 = &menor_;
   }
}


La linea 9 y la linea 14 son una repetición de la linea 4. Esas 2 lineas son superfluas. Osea, si decides usar punteros, asignarlos 1 vez (en este caso) sería suficiente.
Aqui mi perfil en LinkedIn, invitame un cafe aqui

leosansan

#11
Cita de: CalgaryCorpus en 11 Julio 2014, 18:30 PM
Me debo haber expresado ma.l.....................
La linea 9 y la linea 14 son una repetición de la linea 4. Esas 2 lineas son superfluas. Osea, si decides usar punteros, asignarlos 1 vez (en este caso) sería suficiente.


Sorry!, eso pasa por querer aprovechar el código previo.

Efectivamente, están de más (para el caso de  usar punteros):

Código (cpp) [Seleccionar]
int  mayor = 0 , menor = 0 , *posicion1 , *posicion2 ;
 mayor = votos[0];
 menor = votos[0];
 posicion1 = &mayor_, posicion2 = &menor_;
for( contador = 1 ; contador < 4 ; contador++ ){
 if ( votos[contador] > mayor){
   mayor_= contador ;
   mayor = votos[mayor_];
}
 else if ( votos[contador] < menor){
   menor_= contador ;
   menor = votos[menor_];
 }
}


Y gracias por la observación!!!!!, sólo espero no haberla pifiado esta vez.  ;)

¡¡¡¡ Saluditos! ..... !!!!



EDITADO: Con la perspicaz observación de CalgaryCorpus. ;)

CalgaryCorpus

#12
Creo que el codigo ofrecido tiene un error adicional al hacer una suposición incorrecta. La suposición es esta:
 
No ser mayor que el máximo actual convierte a un numero en el menor del conjunto.

Si los nros fueran { 0, 2, 1, 7 }

La logica del código anterior se seguiría así:


  • El máximo y mínimo es el 0 inicial.
  • 2 es > 0, -> ahora 2 es el maximo, el minimo no cambia
  • 1 no es > 2 -> ahora 1 es el minimo (lo que es falso).
Ademas, el codigo mantiene variables que pueden ser eliminadas.
Lo único necesario, creo yo, es mantener los indices del mayor o menor.

Propongo estas correcciones, imayor e imenor son los indices de los valores mayor y menor. No es necesario guardar el valor mayor o menor, porque eso se obtiene usando el arreglo que se recibe como parametro y esos índices.

#include <stdio.h>

void mayor_menor( int votos[] )
{
   int imayor = 0, imenor = 0;
   int contador = 0;

   for( contador = 1 ; contador < 4 ; contador++ ) {
       if ( votos[contador] > votos[imayor]) {
           imayor = contador ;
       }
       else
       if ( votos[contador] < votos[imenor]) {
           imenor = contador;
       }
   }

   printf( "Valor mayor: %d\n", votos[imayor] );
   printf( "Valor menor: %d\n", votos[imenor] );
}

int main() {
   int votos[] = { 0, 2, 1, 7 };

   mayor_menor( votos );
}


Esto se puede ver en ejecución es este link: http://goo.gl/24qbNK
Aqui mi perfil en LinkedIn, invitame un cafe aqui