PREGUNTA: Dado el siguiente procedimiento en C/C++:
void proc( int a,int b, int & c)
{
int aux;
aux=a+b+c;
c=aux;
}
Para que fuese puro:a) Es ya un procedimiento puro
b) bastaría con pasar las variables a y b por referencia
c) la variable c se debería pasar por referencia
d) Todas las variables, incluida aux, deben pasarse por referencia
RESPUESTA: la opción correcta es la a). ¿Por qué? Para poder responder esto tendremos que conocer la definición de "procedimiento puro" porque si no está difícil

Muchos programadores profesionales no sabrían responder a esto porque es algo bastante teórico, pero veamos la definición. Para ello tenemos que ver algún concepto previo:
Transparencia referencial: existe transparencia referencial si el resultado de una llamada a un subprograma puede predecirse con la información del código de la llamada, es decir, si siempre que se pasan los mismos argumentos se obtienen los mismos resultados. La transparencia referencial se garantiza si el subprograma utiliza solo variables o elementos locales. Si un subprograma modifica una variable externa (global) se dice que está produciendo efectos secundarios o laterales (side effects) y que no existe transparencia referencial.
Procedimiento puro: el que no tiene efectos laterales, es decir, el que es tranparente referencialmente. No se exige el paso de argumentos por valor para considerar un procedimiento puro (en cambio para considerar una función pura sí se exige el paso de argumentos por valor).
En resumen, el procedimiento propuesto es puro porque solo usa elementos o variables locales (independientemente de que reciba dos parámetros por valor y uno por referencia). Si fuera una función, no sería pura.