[Off] [On] Acerca de dos opciones - Reducciуn de cуdigo
#1

Hola, pues no supe que tнtulo ponerle pero se trata de lo siguiente:
Estoy creando una funciуn en C, pero creo que estoy poniendo dos veces algo innecesario y esta mal optimizada, en este caso el for dos veces para diferentes opciones, una que es usando el signo mayor y otra opciуn el signo menor.
pawn Код:
float Mostrar_(float *dir, short opc, int max)
{
    float aux = *dir;
    if(opc == MAXIMA)//Este if encaso de que vaya a usar el operador <
    {
        for(int i = 0; i != max; i++)//Un for para esto
        {
            if(aux < *(dir+i))//ACA es donde uso el operador
                aux = *(dir+i);
        }
    }
    else//Si no, usarй el operador >
    {
        for(int i = 0; i != max; i++)//Y tengo que crear otro for para hacer comparaciones con el >
        {
            if(aux > *(dir+i))//ACA es donde uso el operador
                aux = *(dir+i);
        }
    }
    return aux;
}
La duda es si puedo evitar estar escribiendo dos veces el for, me gustarнa usar un parбmetro que almacene un operador de comparaciуn.
La misma duda la tengo en pawn obvio sin punteros, me refiero a los dos for
їO no es posible? Intente algo con el operador ternario pero me daba errores.
Mi idea original era crear una funciуn que pasara como parбmetros operadores (==, <, >, >=, <=) para que en el for hiciera comparaciones pero con el parбmetro
Reply
#2

No entiendo que es lo que vos queres hacer, onda vos queres agarrar y obtener el valor mнnimo y mбximo segъn un parбmetro comparando con algunos operadores? En serio no se entiende que queres hacer.
Reply
#3

Lo siento si no me expliquй bien, osea algo asн:
pawn Код:
void funcion(operador)//Donde "operador" serнa cualquiera de los siguientes operadores (<, >, <=, >=, ==)
{
    if(variable operador variable2)
    printf("Hola");
}
Reply
#4

Hmm no no se puede ya que se supone que los operadores que estбs planteando se usan para comparar variables no otros operadores; osea un operador de esos solo compara dentro de un condicional if y no retornan ningъn valor onda no, no se puede. Podrнas hacer esto pero no serнa lo mismo:
pawn Код:
void funcion(char operador)
{
switch(operador)
{
case '<': print("Hola"), break;
}
}
Reply
#5

Vale, creo entonces que solo se podrнa con otros lenguajes de mas bajo nivel їno?
Pensй que se podнa hacer algo similar ya que ahorrarнa mucho cуdigo. Otra forma que pensй de hacerlo es asн:
pawn Код:
bool comparar(int var1, int var2, char operador)
{
    switch(operador)
    {
        case '>':
            if(var1 > var2)
                return true;
            else return false;
        break;
        case '<':
            if(var1 < var2)
                return true;
            else return false;
        break;
    }
}
Esto podrнa sustituir un if(var 1 > var2) = if(comparar(var1, var2, '>')) pero es realmente lento hacer esto desde mi punto de vista
Reply
#6

Al pedo hacer eso, si queres hacer algo asн, si tendrнas que hacerlo en un lenguaje de bajo nivel.
Reply
#7

Код:
if(aux MAXIMA?(<):(>) *(dir+i))
OJO: Con reducir lineas no significa que estarб mбs optimizado, se procesarб mбs rбpido si utilizas el else a como ya lo tienes.
Reply
#8

Quote:
Originally Posted by Daniel-92
Посмотреть сообщение
Код:
if(aux MAXIMA?(<):(>) *(dir+i))
OJO: Con reducir lineas no significa que estarб mбs optimizado, se procesarб mбs rбpido si utilizas el else a como ya lo tienes.
Un else mas rбpido que un ternario?
Reply
#9

Quote:
Originally Posted by jotajeda
Посмотреть сообщение
Un else mas rбpido que un ternario?
Depende de como se use, usar 1 sola vez else va ser mas rapido que usar miles de veces el ternario a como es el codigo que presenta Su37Erich
Reply
#10

Gracias Daniel-92 intentarй probar esa sintaxis por que me marcaba errores al hacerlo asн; y si, hacer eso: if(aux MAXIMA?(<)>) *(dir+i)) es mucho mas lento a como lo tengo y lo serнa mas con muchos mas datos, creo que me quedarй con el else, prefiero tener un cуdigo mas grande que uno mas lento.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)