Biorhythms: Difference between revisions

Content added Content deleted
m (Automated syntax highlighting fixup (second round - minor fixes))
No edit summary
Line 93: Line 93:
Mental day 25: valley
Mental day 25: valley
</pre>
</pre>

=={{header|Amazing Hopper}}==
Esta es mi versión de la tarea: en vez de mostrar cifras frías, es mejor un gráfico, aunque este sea en texto.
Hopper permite usar la opción de preprocesamiento especial "High level", que consiste en que todo lo encerrado entre "#( )" será escrito de la forma infija formal, con expresiones como "(2+3)*sin(PI)" y cosas parecidas. En la tarea presente, la cantidad de cálculos y su complejidad hacen meritorio usar esta opción del preprocesador, que no es muy óptima debido a que realiza un preprocesado general, pero salva.
Un preprocesamiento general hace que una línea como "a+b" sea convertida a "{a};{b};add", cuando lo óptimo sería "{a} plus(b)", porque en el segundo caso no es necesario pasar "b" a la pila de trabajo. la instrucción "plus" no trabaja con expresiones.
Las expresiones dentro de "#()" deben escribirse cuidando el uso de paréntesis y sin espacios en blanco en los nombres de variables.

<syntaxhighlight lang="Amazing Hopper">
/* TASK: Bioritmo, Rosetta Code */

#include <jambo.h>

Main
Set break
Set stack 15
Get total args
If ( Is equal to '7' )
/* argumentos del programa*/

nombre="", año=0, mes=0, día=0, año a examinar=0, mes a examinar=0
Set ' Arg str(2), Arg num(3) Arg num(4), Arg num(5) ', Move to 'nombre, año, mes, día'
Set ' Arg num(6), Arg num(7) ', Move to 'mes a examinar, año a examinar'

/* arrays de valores constantes */
Void ' Etiquetas, Meses, Factores '
/* otras variables utilitarias */
b=año, g=año a examinar, l=g, r=0

/* programa */
Gosub 'Configuración del programa'
Gosub 'Construcción del bioritmo'
Locate (22, 1), Prnl
Else
Printnl ("Modo de uso: hopper bioritmo.jambo NOMBRE DD MM AA MME AAE")
Printnl (Utf8("donde DD,MM,AA fecha de nacimiento, MME, AAE mes y año a examinar"))
End If
End

Subrutines

Define 'Construcción del bioritmo'
ak=0, b1=0, y=0
Loop
Gosub 'Análisis de año bisiesto'
Let ( ak := #( Factores[mes]+28.5-día ) )
++mes
x=12
When ( #( mes < 13 ) ){ Set 'ak,x', Let( ak := Gosub 'Cálculo' ) }
Let ( b1 := #( g-b-1 ) )
Set decimal '0'
Let ( ak := #( (b1*365+((g-1)/4)-((g-1)/100)+((g-1)/400)-((b/4)-(b/100)+(b/400))+ak) ) )
Unset decimal
y = ak
Let (b := g)
Gosub 'Análisis de año bisiesto'

Let ( x := #( mesaexaminar - 1 ) )
Let ( mes := 1 )
If ( #( x <> 0 ) )
Set 'ak, x', Let( ak := Gosub 'Cálculo' )
y = ak
End If

Cls
Set 'ak, y', Gosub 'Desplegar la malla'
Pause
++mes a examinar
Until ( #( mesaexaminar == 13 ) )
Return

Define 'Desplegar la malla, ak, y'
i=4, j=0, i1=1, fi=3

Loop
Set 'i, i1, fi', Gosub 'Genera la malla'
Set 'i, fi, i1', Gosub 'Escribe la identificación'
Set 'ak, i, fi', Gosub 'Despliega el bioritmo'
i += 34
Let ( ak := y )
++i1
++j
Until ( #( j == 3 ) )

Return

Define 'Genera la malla, i, i1, fi'
j1=4, j2=0, ti=i, i2=0

Let ( r := Get if( Equals( i1,1 ), 23, Get if( Equals( i1,2 ), 28, 33) ) )

Loop
Let ( j2 := Add( 4, i ) )

Loop if ( #( j2 < ( (27+Factores[mesaexaminar])+i) ) )
Locate ( #(j1+fi), j2 ), Printnl (" |")
j2 += 5
Back

Locate ( #(j1+fi), #( 28+(Factores[mesaexaminar])+i) ), Printnl ("| ")
++j1
Until ( #( j1 > 13 ) )

Let ( i := ti )
i2 = ti
j2 = 1
Loop if ( #( j2 < ((27 + Factores[mesaexaminar] )+1) ) )
Locate ( #(8+fi), #(i2+1) ), Printnl ("-")
++i2, ++j2
Back

Locate ( #(8+fi), #(5+i) ), Printnl ( "+" )
Loccol ( #(10+i) ), Printnl ( "+" )
Loccol ( #(15+i) ), Printnl ( "+" )
Loccol ( #(20+i) ), Printnl ( "+" )
Loccol ( #(25+i) ), Printnl ( "+" )

Locate ( #(14+fi), #(1+i) ), Printnl ( "1...5...10...15...20...25..." )

If ( #( (28+Factores[mesaexaminar]) == 29 ) )
Locate ( #(14+fi), #(29+i) ), Printnl ( "." )
Else If ( #( (28+ Factores[mesaexaminar]) == 30 ) )
Locate ( #(14+fi), #(29+i) ), Printnl ( "30" )
Locate ( #(8+fi), #(30+i) ), Printnl ( "+" )
Else If ( #( (28+Factores[mesaexaminar]) == 31 ) )
Locate ( #(14+fi), #(29+i) ), Printnl ( "30." )
Locate ( #(8+fi), #(30+i) ), Printnl ( "+" )
End If

Return

Define 'Escribe la identificación, i, fi, i1'
Locate ( #(16+fi), #(1+i) ), Printnl ( #( Meses[mesaexaminar] ), " ", Int(l), " D. de C." )
Locrow ( #(17+fi) ), Printnl ( "Bioritmo para ", nombre )
Locrow ( #(18+fi) ), Printnl ( "Estado: ", #( Etiquetas[i1] ) )
Return

Define 'Despliega el bioritmo, ak, i, fi'
n=0, j=0
PI = M_PI

Loop if( #( j < ( (28 + Factores[mesaexaminar]) * 2 ) ) )
Let ( ak := #( ak + 0.5 ) )
Let ( n := #( (10 * ( -(sin( ( 2 * PI * ak ) / r ) ) ) ) + 17 ) )

If ( #( (int( int( j / 2 )-(( int( j / 2) / 5) * 5))) == 5 ) )
Locate ( #( int( n / 2 ) + fi ), #( int( j / 2 ) + ( i + 1 )) )
Else
Locate ( #( (n / 2 ) + fi ), #( ( j / 2 ) + ( i + 1 ) ) )
End If
Printnl ("*")
++j
Back

Return

Define 'Análisis de año bisiesto'
x1=0, x2=0, x3=0
/* "b" es variable global */
Let ( x1 := Get if ( #( b - ( int( b / 4 ) * 4 ) == 0 ), 1, 0 ))
Let ( x2 := Get if ( #( b - ( int( b / 100 ) * 100 ) == 0 ), 1, 0 ))
Let ( x3 := Get if ( #( b - ( int( b / 400 ) * 400 ) == 0 ), 1, 0 ))
[2] #( x1 - x2 + x3 ), Put 'Factores'
Return

Define 'Cálculo, ak,x'
i = mes
Loop if( #(i <= x) )
Let ( ak := #( 28 + Factores[i] + ak ) )
++i
Back
Return 'ak'

/* CONFIGURACION DEL PROGRAMA */

Define ' Configuración del programa '
Set ' Utf8("Físico"), "Emocional", "Intelectual" ' Apnd list 'Etiquetas'
Set ' "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", \
"Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre" ' Apnd list 'Meses'
Set ' 3, 0, 3, 2, 3, 2, 3, 3, 2, 3, 2, 3 ' Apnd list 'Factores'
Return
</syntaxhighlight>
{{out}}
<pre>
$ hopper jm/bioritmo.jambo
Modo de uso: hopper bioritmo.jambo NOMBRE DD MM AA MME AAE
donde DD,MM,AA fecha de nacimiento, MME, AAE mes y año a examinar

$ hopper jm/bioritmo.jambo Mr.Dalien 18 1 1980 1 2022
*** ** ***** ****
| ** ** | | || **| | | | ** |* ** | | | | |*
| ** |** | | || ** | | | *| || |** | | | | **|
| *| | * | | || ** | | | * | || | ** | | | | **||
| * | | * | | |* |** | | | * | || | **| | | | ** ||
----+-*--+----+---*+----+----*| ----+-*--+----+----+*---+----+| ----+---**----+----+----+**--+|
|** | | ** | **| | * | | ** | || | |* | | * ||
|* | | * | *|| | *| | ** | || | | * | | *| ||
* | | |* | * || | * | **| | || | | **| | ** | ||
**| | | | ** |** || | |** | ** | | || | | ** |** | ||
*** | | | | **** || | | ***** | | || | | |***** | ||
1...5...10...15...20...25...30. 1...5...10...15...20...25...30. 1...5...10...15...20...25...30.

Enero 2022 D. de C. Enero 2022 D. de C. Enero 2022 D. de C.
Bioritmo para Mr.Dalien Bioritmo para Mr.Dalien Bioritmo para Mr.Dalien
Estado: Físico Estado: Emocional Estado: Intelectual


*** ** ***** ******
** | ** | | | ** | * | | | | ** | * * |** | | | | |
** | **| | | ** | ** | | | |* | | | **| | | | |
* | *| | | *| | ** | | | * | | | ** | | | |
| * | | * | | **| | | *| | | | ** | | | |
----+----+*---+----+-*--+--| ---*+----+----+--*-+----+--| ----+----+**--+----+----+--*
| |** | |** | | * | | ** | | | | | * | | | *|
| | * | |* | | |* | |** | | | | | *| | |* |
| | * | * | | | * | ** | | | | | ** | ** |
| | ** **| | | | **| ** | | | | | |** | **| |
| | **** | | | | ***** | | | | | | | ***** | |
1...5...10...15...20...25... 1...5...10...15...20...25... 1...5...10...15...20...25...

Febrero 2022 D. de C. Febrero 2022 D. de C. Febrero 2022 D. de C.
Bioritmo para Mr.Dalien Bioritmo para Mr.Dalien Bioritmo para Mr.Dalien
Estado: Físico Estado: Emocional Estado: Intelectual

....
*** ** ***** ******
** ** | | | **|| | | | ** | **| || | ** |** | | ||
** |** | | | ** || | | |* | ** || | **| | **| | ||
*| | * | | | * || | | * | ** || | ** | | ** | ||
* | | * | | |* || | | *| | |** || |** | | ** | ||
-*--+----+---*+----+----*----+| ----+----+--*-+----+----+-*--+| ----**---+----+----+**--+----+|
** | | ** | ** || | | ** | | | * || *| | | | * | ||
* | | * | *| || * | |** | | | *|| * | | | | *| ||
| | |* | * | || * | ** | | | *| ** | | | | ** ||
| | | ** |** | || **| ** | | | |* * | | | | |** ||
| | | **** | || ***** | | | | || | | | | | ****
1...5...10...15...20...25...30. 1...5...10...15...20...25...30. 1...5...10...15...20...25...30.

Mayo 2022 D. de C. Mayo 2022 D. de C. Mayo 2022 D. de C.
Bioritmo para Mr.Dalien Bioritmo para Mr.Dalien Bioritmo para Mr.Dalien
Estado: Físico Estado: Emocional Estado: Intelectual

....

*** * ***** * ******
** ** | | | **| ** | ** | | | | ** | | | | ** *
** |** | | | ** | | **| | | | * | | | | | ** | |
*| | * | | | * | | ** | | | * | * | | | |** | |
* | | * | | |* | | ** | | |* | ** | | | ** | |
-*--+----+---*+----+----*----+ ----+----+*---+----+----*----+ -**-+----+----+---**----+----+
** | | ** | ** | | | * | | ** | *| | | * | | |
* | | * | *| | | | * | | **| | * | | * | | |
| | |* | * | | | | *| | ** | | |** | ** | | |
| | | ** |** | | | | ** |** | | | ** | ** | | |
| | | **** | | | | |***** | | | ***** | | | |
1...5...10...15...20...25...30 1...5...10...15...20...25...30 1...5...10...15...20...25...30

Noviembre 2022 D. de C. Noviembre 2022 D. de C. Noviembre 2022 D. de C.
Bioritmo para Mr.Dalien Bioritmo para Mr.Dalien Bioritmo para Mr.Dalien
Estado: Físico Estado: Emocional Estado: Intelectual


** *** **** **** ****
**| | | |** |** || ** | | | | ** || * | | | | | ** ||
** | | ** | ** || |** | | | |* || ** | | | | ** ||
* | | * | * || | ** | | | * || **| | | | ** ||
|* | | *| | *|| | **| | | *| || ** | | | **| ||
----+-*--+----+--*-+----+----*| ----+---*+----+----+--*-+----+| ----**---+----+----+-**-+----+|
| ** | | ** | | ** | * | | ** | || | * | | |* | ||
| * | | * | | |* | |* | |** | || | * | | * | ||
| *| |* | | || | | * | ** | || | ** | **| | ||
| ** ** | | || | | **| ** | || | ** | ** | | ||
| |****| | | || | | ***** | | || | | ***** | | ||
1...5...10...15...20...25...30. 1...5...10...15...20...25...30. 1...5...10...15...20...25...30.

Diciembre 2022 D. de C. Diciembre 2022 D. de C. Diciembre 2022 D. de C.
Bioritmo para Mr.Dalien Bioritmo para Mr.Dalien Bioritmo para Mr.Dalien
Estado: Físico Estado: Emocional Estado: Intelectual

</pre>

=={{header|C}}==
=={{header|C}}==
{{trans|Locomotive Basic}}
{{trans|Locomotive Basic}}