how can I apply 3 shader by coordinates instead of unwrap UV?
You could test the normal of the surface against (0,0,1) in Object Space.

Assuming 'Top' and 'Bottom' faces are normal to Z in object space..




.. take the absolute dot product of the shading point normal (given
in World Space, so converted to Object Space,) with (0,0,1).
Use ranges of that value as factors in the mixes between your shaders. 






EDIT: This tree discriminates by the normal of the underlying geometry. If you want the interpolated (smooth) normal, use 'Normal' instead of 'True Normal' in the Geometry Node.