P_19_E21-Con+Repetitivas+y+char

=__**Programa que realiza algunas operaciones sobre puntos de un plano**__=

> Programa que basado en un menú realiza las siquientes operaciones >> -- MENU DE OPCIONES --- >> 1. Ver si un punto está en una circunferencia de radio 10 y centro en el punto(0, 0) >> 2. Averiguar cuadrante en que está el punto >> 3. Paso de coordenadas cartesianas a polares

> Version: Unicamente se utilizan sentencias condicionales > code format="pascal" PROGRAM CONDIC_21_Pagina_19 ; CONST rRADIO   = 10.0 ; rX_CENTRO = 0.0 ; rY_CENTRO = 0.0 ; VAR cOpcion               : Char ; rX, rY : Real ; boEstaEnCircunferencia : Boolean ; rModulo, rArgumento   : Real ; byCuadrante           : Byte ; BEGIN REPEAT CLrScr ; Writeln ; { Mostrar el menú de opciones } Writeln ('-- MENU DE OPCIONES ---') ; Writeln ; Writeln ('1. Ver si un punto est  en una circunferencia ') ; Writeln ('       de radio 10 y centro en el punto(0, 0) ') ; Writeln ('2. Averiguar cuadrante en que est  el punto') ; Writeln ('3. Paso de coordenadas cartesianas a polares') ; Writeln ('0. Terminar') ; Writeln ; REPEAT Write ('Escribe el n§ de la opci¢n elegida -> ') ; Readln (cOpcion) ; UNTIL ('0' <= cOpcion) AND (cOpcion <= '3') ; CASE cOpcion OF        '1' : BEGIN Writeln ;            { Leer las coordenadas de un punto } Write ('Escribe el valor de X: ') ; Readln (rX) ; Write ('Escribe el valor de Y: ') ; Readln (rY) ; boEstaEnCircunferencia := ((Sqr (rX - rX_CENTRO) + Sqr (rY - rY_CENTRO))                        <= Sqr (rRADIO)) ; {                                             OR                         (Abs (Sqr (rRADIO)- (Sqr (rX - rX_CENTRO) + Sqr (rY - rY_CENTRO)))                          <= 0.001) ; }                                      { Mostrar resultado } Writeln ; IF boEstaEnCircunferencia THEN Writeln ('El punto ESTA DENTRO de la circunferencia') ELSE Writeln ('El punto ESTA FUERA de la circunferencia' ) ; Writeln ; END ; '2' :             BEGIN Writeln ;            { Leer las coordenadas de un punto } Write ('Escribe el valor de X: ') ; Readln (rX) ; Write ('Escribe el valor de Y: ') ; Readln (rY) ; IF (rX = 0) OR (rY = 0) THEN BEGIN { Mostrar resultado } Writeln ; Writeln ('El punto (', rX:0:2, ', ', rY:0:2, ') está en un eje de coordenadas') ; Writeln ; END ELSE BEGIN IF (rX > 0) THEN      { Identificar el cuadrante } IF (rY > 0) THEN byCuadrante := 1 ELSE byCuadrante := 4 ELSE IF (rY > 0) THEN byCuadrante := 2 ELSE byCuadrante := 3 ; { Mostrar resultado } Writeln ; Writeln ('El punto (', rX:0:2, ', ', rY:0:2, ') está en el cuadrante: ', byCuadrante) ; Writeln END ; END ; '3' :             BEGIN Writeln ;            { Leer las coordenadas de un punto } Write ('Escribe el valor de X: ') ; Readln (rX) ; Write ('Escribe el valor de Y: ') ; Readln (rY) ; IF (rX <> 0) AND (rY <> 0) THEN BEGIN rModulo := Sqrt (Sqr (rX) + Sqr (rY)) ; { Cálculo como si fuera un punto del cuadrante 1º o 4º } rArgumento := Arctan (rY / rX) ; { Modificar el argumento dependiento del cuadrante } IF (rX > 0) THEN          { Identificar el cuadrante } IF (rY > 0) THEN byCuadrante := 1 ELSE byCuadrante := 4 ELSE IF (rY > 0) THEN byCuadrante := 2 ELSE byCuadrante := 3 ; { Modificar el argumento dependiendo del cuadrante } CASE byCuadrante OF                   2 : rArgumento := PI + rArgumento ; 3 : rArgumento := PI + rArgumento ; 4 : rArgumento := 2 * PI + rArgumento ; END ; { Mostrar resultado } Writeln ; Writeln ('El punto (', rX:0:2, ',', rY:0:2, '): '); Writeln ; Writeln ('     Modulo: ', rModulo:0:2) ; Writeln ('  Argumento: ', rArgumento :0:2) ; Writeln END ELSE    { (rX = 0) OR (rY = 0) } BEGIN { El punto está en un eje de coordenadas } Writeln ; rModulo := Sqrt (Sqr (rX) + Sqr (rY)) ; IF (rX = 0) AND (rY = 0) THEN Writeln ('El punto (', rX:0:2, ',', rY:0:2, ') está en el origen de coordenadas') ELSE BEGIN Writeln ('El punto (', rX:0:2, ',', rY:0:2, ') está en un eje de coordenadas') ; Writeln ('     Modulo: ', rModulo:0:2) ; Writeln ; IF rX = 0 THEN IF rY > 0 THEN Writeln ('  Argumento: ', PI / 2 :0:2) ELSE Writeln ('  Argumento: ', 3 * PI / 2:0:2) ELSE IF rX > 0 THEN Writeln ('  Argumento: ', 0.0  :0:2) ELSE Writeln ('  Argumento: ', PI :0:2) ; END ; END ; END ; END ; { CASE } IF cOpcion <> '0' THEN cEspera := ReadKey ; UNTIL cOpcion = '0' ; WriteLn ; WriteLn ('========================================') ; WriteLn ('    Pulsa RETURN para terminar') ; Write  ('________________________________________') ; ReadLn ; END. { FIN del PROGRAMA } code