El código lo puedes optimizar de forma que en el mismo bucle de entrada de datos evalúe si la entrada en cada momento es mayor que la anterior, y la posición en el array. 
Este puede ser una forma de resolverlo suponiendo que los números serán siempre mayor o igual a 0 (lo puedes adaptar para números negativos) 
En pseudocódigo/diagrama de flujo cutre): 
Valor inicial del numero mayor = 0;
Posicion i en el array de dicho valor = 0;
Posicion j en el array de dicho valor = 0;
 
Bucle:
Introduzco valor;
Asigno valor al array
¿Mayor que valor inicial (variable mayor)?
Si:
Ahora variable mayor vale el valor de esa entrada
Ahora Posicion i y Posicion j valen la i y la j del array
No:
No hago nada 
Es como lo tienes tú, solo que el segundo bucle que tienes lo puedes hacer en el primero y ahorrarte recorrer otra vez el array. Si además, cunado haces:   
Código C++:
Ver original- ........ 
- if (matriz[i][j]>=mayor) 
- { 
- mayor=matriz[i][j]; 
- posicion_i = i; 
- posicion_j = j; 
- } 
- ...... 
Pues no sólo obtienes el valor mayor sino su posición en el array