This is the last release of my elementary code. Now there is only one screen, instead the previous screens put one each other with _PUTIMAGE. I avoid the use of _PUTIMAGE and I have used WINDOW, VIEW, VIEW PRINT instead. I have also implemented the possibility to scroll the screen.
I accept advice and tips.
By flair, I feel something inelegant in:
1-a main code that is merely the call of a subroutine (line 22);
2-a subutine that calls itself (line 96);
3-a subroutine that never get out of itself: see p. 2, and the fact that the program terminates in line 93, in the subroutine, and not in the main program.
but I don't know if these are my far-fetched ideas and I didn't find better ways.
CONST A%
= 1 'per prendere un punto ogni A% pixel. CONST k!
= 2 ' coefficiente della x. CONST m%
= 3 'esponente della x. CONST s!
= 10 * k!
'amplificazione di scala delle ascisse.
_TITLE "RAPPRESENTAZIONE DELLA FUNZIONE y = kx^m (k =" + STR$(k!
) + " ; m =" + STR$(m%
) + ")"
disegno
DIM titolo1$
, titolo2$
, punti$
, istruzioni$
, keypress$
DIM punti%
, i%
, n%
'valori di x considerati da -punti% a +punti%, i% e n% sono contatori.
i% = 1
n% = 0
DO 'disegna cartiglio, assi, scrive istruzioni e chiede il n. di punti. non accetta come valore "0". titolo1$
= "RAPPRESENTAZIONE DELLA FUNZIONE y = kx^m (k =" + STR$(k!
) + " ; m =" + STR$(m%
) + ")" titolo2$
= "(Fattore di amplificazione delle ascisse: s = " + STR$(s!
) + ")" VIEW ((L%
- 800) \
2, (H%
- 600) \
2)-((L%
- 800) \
2 + 800, (H%
- 600) \
2 + 600), , rosso
'area grafico 800x600 e pone le coordinate come locali a quest'area. LINE (799 \
2, 31)-(799 \
2, 568), bianco
LINE (31, 599 \
2 + 2)-(768, 599 \
2 + 2), bianco
punti$ = "Inserire il n. di punti in ascissa: "
n% = -punti%
DO UNTIL n%
= punti%
+ 1 ' crea il vettore con i valori di x e y i cui elementi vanno da -punti% a +punti%. disegna un cerchio colorato per ogni punto, traslando il grafico in modo che l'orgine non sia in alto a sinistra, ma su "0". funzione(i%).x = n%
funzione(i%).y = k! * (funzione(i%).x) ^ m
WINDOW (0, 0)-(799, 599) 'pone il punto (0,0) in basso a sinistra e non scala gli assi x e y. CIRCLE (s!
* A%
* funzione
(i%
).x
+ 399, A%
* funzione
(i%
).y
+ 299), 2, rosso
PAINT (s!
* A%
* funzione
(i%
).x
+ 399 + 0.5, A%
* funzione
(i%
).y
+ 299 + 0.5), rosso
i% = i% + 1
n% = n% + 1
FOR i%
= 1 TO UBOUND(funzione
) - 1 ' congiunge i punti. LINE (s!
* A%
* funzione
(i%
).x
+ 399, A%
* funzione
(i%
).y
+ 299)-(s!
* A%
* funzione
(i%
+ 1).x
+ 399, A%
* funzione
(i%
+ 1).y
+ 299), rosso
VIEW 'elimina l'area del grafico 800x600 e ripristina le coordinate assolute. istruzioni$ = "Premere INVIO per un nuovo calcolo, ESC per terminare."
n% = 0
DO ' stampa le coppie di valori. FOR i%
= (1 + Z%
* n%
) TO Z%
* (n%
+ 1) disegno