[C con Clase] Duda en código

Programante programante en gmail.com
Sab Jul 25 23:52:21 CEST 2009


Nicolás Figueroa Ramírez escribió:
> Revisando algunos codigos en internet, para profundizar un poco el
> lenguaje (C y C++) me tope con esto
>
> int T, n, ans;
> int A[5000], B[5000], C[5000], H[10001], V[10001];
>
>
>
> int main() {
>   cin>>T;
>   for (int t=1; t<=T; t++) {
>     cin>>n;
>     for(int i=0; i<n; ++i) cin>>A[i]>>B[i]>>C[i];
>
>     int ans = 0;
>     for (int CC=0; CC<=10000; ++CC) {
>
>
>       memset(H, 0, sizeof(H));
>       memset(V, 0, sizeof(V));
>       for (int i=0; i<n; ++i)
>         if (C[i]<=CC && A[i]+B[i]+CC<=10000)
>         { V[A[i]]++; H[B[i]]++; }
>       int Q = 0;
>
>
>       for (int AA=-1; AA<10000-CC; ++AA) {
>         Q = Q + V[AA+1] - H[10000-CC-AA];
>         *ans >?= Q;*
>
>
>       }
>     }
>
>     cout<<"Case #"<<t<<": "<<ans<<endl;
>   }
>   return 0;
> }
>   
> Y no logre entender que significa la linea resaltada (el resto lo
> entiendo), alguien me podria ayudar?

Es curioso. No conocía esa construcción. Aunque está claro que pertenece
al C++ (si bien no al C) puesto que compila bien.

Viendo el código que genera parece ser equivalente a:
if (ans >= Q)
  ans = ans;
else
    ans = Q;


Así que vendría a ser un operador para "obtener el máximo". Podría
leerse como 'asignar si mayor'.
El opuesto **ans <?= Q;** también funciona.






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