Biorhythms: Difference between revisions
no edit summary
Thundergnat (talk | contribs) m (Automated syntax highlighting fixup (second round - minor fixes)) |
No edit summary |
||
Line 93:
Mental day 25: valley
</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}}==
{{trans|Locomotive Basic}}
|