Rivista: Commodore Computer Club (IT) – N.ro: 14 / ottobre 1984 – Trascrizione: David La Monaca
Facciamo un tuffo nel passato e torniamo tra i banchi del liceo con questi programmi di matematica dedicati alla risoluzione di equazioni e disequazioni di secondo grado.
Equazioni di secondo grado – Si parte con un semplice listato che risolve le equazioni di 2° grado del tipo ax2+bx+c=0: basta inserire i coefficienti a, b e c ed il programma ci fornirà le due soluzioni x1 e x2. Naturalmente si tiene conto della possibilità che non vi siano soluzioni e anche che le soluzioni siano coincidenti (x1=x2) o che l’equazione non sia di grado 2 (a=0). Poche righe in BASIC V2 e avrete sotto controllo tutta una classe di equazioni. Molto comodo per chi vuole controllare gli esercizi assegnati come compito a casa. Ovviamente il programma fornisce le soluzioni, se non intere, in forma decimale e non frazionaria, come di solito si aspettano i prof di matematica. 😉
Disequazioni di secondo grado – Il secondo programma risolve le disequazioni di 2° grado del tipo ax2+bx+c≥0 oppure del tipo ax2+bx+c≤0. Anche qui occorre inserire i coefficienti a, b e c e poi fornire il segno della disequazione (maggiore uguale ≥ o minore uguale ≤). Sulla tastiera del C64 basta premere sui tasti corrispondenti “,” (virgola = minore uguale) oppure “.” (punto = maggiore uguale). Il programma passerà poi all’elaborazione e fornirà la soluzione della disequazione. Sono contemplate tutte le possibilità (nessuna soluzione, disequazione non di secondo grado, equazione associata sempre positiva o sempre negativa). Nel caso di soluzioni distinte x1, x2 viene anche fornito un diagramma grafico nel quale sono evidenziati gli intervalli di positività e negatività dell’equazione associata, con l’indicazione di eventuali zeri dell’equazione.
Equazioni parametriche – Il terzo programma della serie qui presentata risolve le equazioni parametriche di 2° grado, quelle in cui i coefficienti di una normale equazione di 2° grado dipendono da un parametro k. L’equazione diventa quindi del tipo (a+dk)x2+(b+ek)x+(c+fk)=0 ed il compito che si prefigge il programma di risoluzione è di trovare le radici in funzione del parametro k. Quindi si tratta di trovare per quali valori del parametro k le radici rispondono alle condizioni imposte, che, nel caso in esame, sono che le radici devono essere comprese fra due valori L1 ed L2 della variabile x (L1<x<L2).
Download links: eq2g.prg – diseq2g.prg – eqparam2g.prg – ccc14-math.d64

Titolo: Equazioni, disequazioni ed equazioni parametriche di 2° grado
Piattaforma: Commodore Vic-20/64
Genere: Matematica
Linguaggio: BASIC V2
Autore versione originale: Giovanni Bellù
Pubblicazione: Commodore Computer Club n. 14, ottobre 1984
Anno: 1984
Digitazione: David La Monaca
Anno: 2026 (marzo)
Download: immagine dischetto ccc14-eqdiseq.d64, file PRG
Note: –
Qui di seguito trovate il codice in linguaggio BASIC da copiare sul vostro Commodore 64 originale oppure su un emulatore. Per PC Windows 10/11 suggeriamo VICE con il supporto dell’editor e compilatore CBM Prg Studio.
Di seguito le istruzioni per caricare il listato sull’emulatore VICE:
– Copiare il listato qui sotto e incollatelo in CBM Prg Studio.
– I codici dei caratteri speciali presenti nel listato saranno trattati da CBM Prg Studio e convertiti nei corrispondenti simboli del BASIC V2.
– Selezionare Generate .prg (current file) per ottenere il file programma con estensione PRG
– Lanciare l’emulatore VICE e dal menu File > Smart attach… > nomefile.prg
Buon divertimento! Anzi, buono studio della matematica!
Attenzione – Nel listato i caratteri ‘>’ e ‘<‘ potrebbero essere stati sostituiti dai rispettivi codici di encoding HTML ‘>’ e ‘<’. Nel caso siano presenti, sostituite questi valori nel listato prima di caricarlo nell’emulatore.
Download links: eq2g.prg – diseq2g.prg – eqparam2g.prg – ccc14-math.d64
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300 100 rem equazioni di secondo grado
110 :
120 rem programma per c64 e vic 20
130 :
140 input"{clear}a,b,c";a,b,c
150 ifa=0thenprint"l'equazione non e' di secondo grado":end
160 if(b*b-4*a*c)<0thenprint"nessuna soluzione":end
170 ifb*b-4*a*c=0thenprint"soluzioni coincidenti x1=x2=";-b/(2*a):end
180 x1=(-b-sqr(b*b-4*a*c))/(2*a)
190 x2=(-b+sqr(b*b-4*a*c))/(2*a)
200 print"soluzioni : "x1,x2
---
100 rem
110 rem disequazioni di secondo grado
120 rem
130 rem
140 rem giovanni bellu'
150 rem
160 rem software
170 rem
180 rem 1984
190 rem
200 rem
210 rem via giardini 20 seregno (mi)
220 rem
230 rem tel.0362/239580
240 rem
250 rem pulisce schermo:
260 print"{clear}{yellow}";
270 rem sfondo nero
280 poke53280,0:poke53281,0
290 rem presentazione
300 printtab(6)"soluzione di disequazioni{down}"
310 printtab(10)"di secondo grado"
320 printtab(7)"{down*2}{red}del tipo: {white}a*x^2+b*x+c><=0"
330 print"{down*3}{green}introduci i valori di {cyan}a,b,c{green}"
340 rem input coefficienti
350 inputa,b,c
360 rem controllo valori introdotti
370 ifa=0andb=0andc=0then260
380 ifa=0thenprint"{clear}{reverse on}{red} la disequazione non e' di secondo grado ":end
390 ifb=0andc=0anda>0thenprint"{clear}{reverse on}{blue}la disequazione e' sempre >0":end
400 ifb=0andc=0anda<0thenprint"{clear}{reverse on}{blue}la disequazione e' sempre <0":end
410 print"{cyan}introduci il verso (<>)"
420 geta$:ifa$<>","anda$<>"."then420
430 ifa$=","thena$="<"
440 ifa$="."thena$=">"
450 rem calcolo delta
460 dx=b*b-4*a*c
470 ifdx<0anda>0thenprint"{clear}{reverse on}{blue}la disequazione e' sempre >0":end
480 ifdx<0anda<0thenprint"{clear}{reverse on}{blue}la disequazione e' sempre <0":end
490 ifdx=0anda>0thenprint"{clear}{reverse on}{blue}la disequazione e' sempre >0":goto750
500 ifdx=0anda<0thenprint"{clear}{reverse on}{blue}la disequazione e' sempre <0":goto750
510 x1=(-b-sqr(dx))/(2*a)
520 x2=(-b+sqr(dx))/(2*a)
530 ifx1>x2thenx=x1:x1=x2:x2=x
540 ifa$=">"anda>0thenb$="{sh asterisk*10}W{sh asterisk} {sh asterisk} {sh asterisk} {sh asterisk} {sh asterisk} W{sh asterisk*10}":e$="+"
550 ifa$=">"anda<0thenb$="{sh asterisk} {sh asterisk} {sh asterisk} {sh asterisk} {sh asterisk} W{sh asterisk*10}W{sh asterisk} {sh asterisk} {sh asterisk} {sh asterisk} {sh asterisk} ":e$="-"
560 ifa$="<"anda<0thenb$="{sh asterisk*10}W{sh asterisk} {sh asterisk} {sh asterisk} {sh asterisk} {sh asterisk} W{sh asterisk*10}":e$="+"
570 ifa$="<"anda>0thenb$="{sh asterisk} {sh asterisk} {sh asterisk} {sh asterisk} {sh asterisk} W{sh asterisk*10}W{sh asterisk} {sh asterisk} {sh asterisk} {sh asterisk} {sh asterisk} ":e$="-"
580 d$="{sh asterisk*10}{cm e}{sh asterisk*10}{cm e}{sh asterisk*10}"
590 ife$="+"thenf$= "{space*4}+{space*5}B{space*4}-{space*5}B{space*4}+"
600 ife$="-"thenf$="{space*4}-{space*5}B{space*4}+{space*5}B{space*4}-"
610 c$="{space*10}B{space*10}B"
620 print"{clear}soluzione:"
630 printb$:printc$:printf$:printc$:printd$
640 printtab(8)x1:printtab(19)x2
650 print"{down*2}{reverse on} i dati erano: "
660 print"a="a
670 print"b="b
680 print"c="c
690 print"verso: "a$
700 print"{reverse on} radici: "
710 print"x1="x1
720 print"x2="x2
730 rem ritardo di 5 secondi
740 fork=1to5000:next:end
750 rem se dx=0
760 print"{down}uno zero per x =";-b/(2*a)
---
10 rem commodore 64
20 :
30 rem equazioni parametriche
40 :
50 :
200 rem sfondo blu
210 poke53280,6:poke53281,6
220 rem pulisce schermo
230 rem presentazione
240 print"{clear}{cyan}"
250 print"{space*4}programma per la soluzione di"
260 print"{down}{space*3}{reverse on} equazioni parametriche "
270 print"{down}{space*4}del tipo :"
280 print"{down}{space*4}(a+dk)x^2+(b+ek)x+c+fk=0"
290 print"{down}{space*12}l1<x<l2"
300 print"{down*4}{space*8}giovanni bellu'"
310 print"{down}{space*11}software"
320 print"{down}{space*13}1984"
330 rem ritardo
340 fork=1to40000:next
350 rem input dati
360 print"{clear}{space*8}(a+dk)x^2+(b+ek)x+c+fk=0"
370 print"{down}{space*16}l1<x<l2"
380 print"{down*2}introduci i valori di: a,d,b,e,c,f,l1,l2"
390 print"{down*2}":inputa,d,b,e,c,f,l1,l2
400 rem primo controllo dati
410 ifl1>l2thenrun
420 rem a>=0 (a+dk>=0)
430 print"{clear}{reverse on} a >=0 "
440 ifd=0then470
450 ifd<0then500
460 aa=-a/d:print"{sh asterisk} {sh asterisk} {sh asterisk}W{sh asterisk*5}":printaa:goto510
470 ifa>0thenprint"{sh asterisk*11}":aa=999:goto510
480 ifa<0thenprint"{sh asterisk} {sh asterisk} {sh asterisk} {sh asterisk} {sh asterisk} {sh asterisk}":goto510
490 print"{reverse on} errore ":end
500 aa=-a/d:print"{sh asterisk*5}W{sh asterisk} {sh asterisk} {sh asterisk}":printaa:goto510
510 rem 1) delta >=0
520 rem (e^2-4df)*k^2+(2be-4fa-4cd)*k+b^2-4ac>=0
530 u2=e*e-4*d*f
540 ifu2=0then560
550 goto790
560 rem a) e^2-4df=0
570 rem delta diventa: (2be-4fa-4cd)*k+b^2-4ac>=0
580 rem tre casi:
590 u1=2*b*e-4*f*a-4*c*d
600 ifu1=0then630
610 ifu1>0then730
620 ifu1<0then760
630 rem primo caso: u1=0
640 rem 2be-4fa-4cd=0
650 rem ci sono tre sottocasi:
660 u=b*b-4*a*c
670 rem primo sottocaso:
680 ifu>0thend$="{sh asterisk*11}":goto1080
690 rem secondo sottocaso:
700 ifu<0thend$="{sh asterisk} {sh asterisk} {sh asterisk} {sh asterisk} {sh asterisk} {sh asterisk}":goto1080
710 rem terzo sottocaso:
720 ifu=0thenprint"{clear}{reverse on} non ci sono soluioni":end
730 rem secondo caso: u1>0
740 k1=(4*a*c-b*b)/(2*b*e-4*f*a-4*c*d):k2=k1
750 d$="{sh asterisk} {sh asterisk} {sh asterisk}W{sh asterisk*5}":goto1080
760 rem terzo caso: u1<0
770 k1=(4*a*c-b*b)/(2*b*e-4*f*a-4*c*d):k2=k1
780 d$="{sh asterisk*5}W{sh asterisk} {sh asterisk} {sh asterisk}":goto1080
790 rem b) calcolo del 'delta k'
800 rem dk=(2be-4fa-4cd)^2-4*(b^2-4ac)*(e^2-4df)
810 dk=(2*b*e-4*f*a-4*c*d)*(2*b*e-4*f*a-4*c*d)
820 dk=dk-4*(b*b-4*a*c)*(e*e-4*d*f)
830 ifdk>0then860
840 ifdk>0then930
850 ifdk<0then1040
860 rem primo caso : dk=0
870 k=-(2*b*e-4*f*a-4*c*d)/(2*e*e-8*d*f)
880 k1=k:k2=k:rem soluzioni coincidenti
890 u3=e*e-4*d*f
900 ifu3>0thend$="{sh asterisk} {sh asterisk} {sh asterisk}W{sh asterisk*5}"
910 ifu3<0thend$="{sh asterisk*5}W{sh asterisk} {sh asterisk} {sh asterisk}"
920 goto1080
930 rem secondo caso : dk>0
940 k1=-((2*b*e-4*f*a-4*c*d)-sqr(dk))/(2*e*e-8*d*f)
950 k2=-((2*b*e-4*f*a-4*c*d)+sqr(dk))/(2*e*e-8*d*f)
960 ifk1>k2thenk=k1:k1=k2:k2=k
970 u3=e*e-4*d*f
980 rem primo caso : u3>0
990 ifu3>0thend$="{sh asterisk*5}W {sh asterisk} {sh asterisk} W{sh asterisk*5}":goto1080
1000 rem secondo caso : u3<0
1010 ifu3<0thend$="{sh asterisk} {sh asterisk} {sh asterisk}W{sh asterisk*5}W{sh asterisk} {sh asterisk} {sh asterisk}":goto1080
1020 ifx1>=l1andx1<=l2thenprint"{reverse on}una soluzione":return
1030 print"nessuna soluzione":return
1040 rem terzo caso : dk<0
1050 u3=e*e-4*d*f
1060 ifu3>0thend$="{sh asterisk*12}"
1070 ifu3<0thenprint"{clear}{reverse on} nessuna soluzione : delta sempre <0 ":end
1080 print"{reverse on} delta {reverse off}"d$:print"k1="k1:print"k2="k2
1090 rem 2) f(l1)>=0
1100 rem (dl^2+el+f)k+(al^2+bl+c >=0
1110 l=l1:u4=d*l*l+e*l+f
1120 ifu4=0then1150
1130 ifu4>0then1210
1140 ifu4<0then1240
1150 rem primo caso
1160 u5=a*l*l+b*l+c
1170 ifu5=0thenprint"{clear}{reverse on} errore nei dati: f(l1) sempre =0 ":end
1180 ifu5>0thenl1$="{sh asterisk*11}":goto1270
1190 ifu5<0thenl1$="{sh asterisk} {sh asterisk} {sh asterisk} {sh asterisk} {sh asterisk} {sh asterisk}":goto1270
1200 end
1210 rem secondo caso:u4>0
1220 f1=-(a*l*l+b*l+c)/(d*l*l+e*l+f)
1230 l1$="{sh asterisk} {sh asterisk} {sh asterisk}W{sh asterisk*5}":goto1270
1240 rem terzo caso:u4<0
1250 f1=-(a*l*l+b*l+c)/(d*l*l+e*l+f)
1260 l1$="{sh asterisk*5}W{sh asterisk} {sh asterisk} {sh asterisk}":goto1270
1270 print"{reverse on} f(l1) {reverse off}"l1$:print"f(li)="f1
1280 rem 3) f(l2)>=0
1290 rem (dl^2+el+f)k+al^2+bl+c >=0
1300 l=l2:u4=d*l*l+e*l+f
1310 ifu4=0then1340
1320 ifu4>0then1400
1330 ifu4<0then1430
1340 rem primo caso
1350 u5=a*l*l+b*l+c
1360 ifu5=0thenprint"{clear}{reverse on} errore nei dati: f(l1) sempre =0 ":end
1370 ifu5>0thenl2$="{sh asterisk*11}":goto1460
1380 ifu5<0thenl2$="{sh asterisk} {sh asterisk} {sh asterisk} {sh asterisk} {sh asterisk} {sh asterisk}":goto1460
1390 end
1400 rem secondo caso:u4>0
1410 f2=-(a*l*l+b*l+c)/(d*l*l+e*l+f)
1420 l2$="{sh asterisk} {sh asterisk} {sh asterisk}W{sh asterisk*5}":goto1460
1430 rem terzo caso:u4<0
1440 f2=-(a*l*l+b*l+c)/(d*l*l+e*l+f)
1450 l2$="{sh asterisk*5}W{sh asterisk} {sh asterisk} {sh asterisk}"
1460 print"{reverse on} f(l2) {reverse off}"l2$:print"f(l2)="f2
1470 rem ultima parte:elaborazione dati
1480 rem e ricerca delle soluzioni
1490 rem
1500 ifd$="{sh asterisk*11}"ord$="{sh asterisk} {sh asterisk} {sh asterisk} {sh asterisk} {sh asterisk} {sh asterisk}"thennd=1:goto1530
1510 ifk1=k2thennd=2:a(1)=k1:a(2)=k1:goto1530
1520 a(1)=k1:a(2)=k2:nd=3
1530 a(nd)=f1:nd=nd+1:a(nd)=f2:ifaa<>999thennd=nd+1:a(nd)=aa
1540 fork=1tond-1
1550 forj=k+1tond
1560 ifa(j)<a(k)thenz=a(k):a(k)=a(j):a(j)=z
1570 ifa(j)=a(k)then1600
1580 next:next
1590 goto1620
1600 z=a(nd):a(nd)=a(k):a(k)=z:k=j:j=k:nd=nd-1
1610 next:next:goto1540
1620 rem calcolo soluzioni
1630 a$="{left}{arrow left}{sh asterisk}":ifnd=1thengoto1690
1640 ifnd=2thengoto1730
1650 ifnd=3thengoto1790
1660 ifnd=4thengoto1870
1670 ifnd=5thengoto1970
1680 print"{reverse on} errore ":end
1690 k=a(1)-50:print"k<"a(1);a$;:gosub2090
1700 k=a(1):print"k="k;a$;:gosub2090
1710 k=a(1)+50:print"k>"a(1);a$;:gosub2090
1720 fork=1to5000:next:end
1730 k=a(1)-50:print"k<";a(1);a$;:gosub2090
1740 k=a(1):print"k=";k;a$;:gosub2090
1750 k=(a(2)-a(1)*sgn(a(1)))/2:printa(1)"<k<"a(2);a$;:gosub2090
1760 k=a(2):print"k="k;a$;:gosub2090
1770 k=a(2)+50:print"k>"a(2);a$;:gosub2090
1780 fork=1to5000:next:end
1790 k=a(1)-50:print"k<"a(1);a$;:gosub2090
1800 k=a(1):print"k="k;a$;:gosub2090
1810 k=(a(2)-a(1)*sgn(a(1)))/2:printa(1)"<k<"a(2);a$;:gosub2090
1820 k=a(2):print"k="k;a$;:gosub2090
1830 k=(a(3)-a(2)*sgn(a(2)))/2:printa(2)"<k<"a(3);a$;:gosub2090
1840 k=a(3):print"k="k;a$;:gosub2090
1850 k=a(3)+50:print"k>"a(3);a$;:gosub2090
1860 fork=1to5000:next:end
1870 k=a(1)-50:print"k<"a(1);a$;:gosub2090
1880 k=a(1):print"k="k;a$;:gosub2090
1890 k=(a(2)-a(1)*sgn(a(1)))/2:printa(1)"<k<";a(2);a$;:gosub2090
1900 k=a(2):print"k="k;a$;:gosub2090
1910 k=(a(3)-a(2)*sgn(a(2)))/2:printa(2)"<k<";a(3);a$;:gosub2090
1920 k=a(3):print"k="k;a$;:gosub2090
1930 k=(a(4)-a(3)*sgn(a(3)))/2:printa(3)"<k<";a(4);a$;:gosub2090
1940 k=a(4):print"k="k;a$;:gosub2090
1950 k=a(4)+50:print"k>"a(4);a$;:gosub2090
1960 fork=1to5000:next:end
1970 k=a(1)-50:print"k<"a(1);a$;:gosub2090
1980 k=a(1):print"k="k;a$;:gosub2090
1990 k=(a(2)-a(1)*sgn(a(1)))/2:printa(1)"<k<"a(2);a$;:gosub2090
2000 k=a(2):print"k="k;a$;:gosub2090
2010 k=(a(3)-a(2)*sgn(a(2)))/2:printa(2)"<k<"a(3);a$;:gosub2090
2020 k=a(3):print"k="k;a$;:gosub2090
2030 k=(a(4)-a(3)*sgn(a(3)))/2:printa(3)"<k<"a(4);a$;:gosub2090
2040 k=a(4):print"k="k;a$;:gosub2090
2050 k=(a(5)-a(4)*sgn(a(4)))/2:printa(4)"<k<"a(5);a$;:gosub2090
2060 k=a(5):print"k="k;a$;:gosub2090
2070 k=a(5)+50:print"k>"a(4);a$;:gosub2090
2080 fork=1to5000:next:end
2090 rem calcolo radici
2100 ar=a+d*k:ifar=0then2200
2110 br=b+e*k
2120 cr=c+f*k
2130 rem calcolo delta
2140 dx=br*br-4*ar*cr:ns=0
2150 ifdx<0thenprint"nessuna soluzione":return
2160 ifdx=0then2250
2170 x1=(-br-sqr(dx))/(2*ar):x1=int(x1*100000)/(100000)
2180 x2=(-br+sqr(dx))/(2*ar):x2=int(x2*100000)/(100000)
2190 if(x1>=l1)and(x1<=l2)thenns=1
2200 if(x2>=l1)and(x2<=l2)thenns=ns+1
2210 ifns=0thenprint"nessuna soluzione":return
2220 ifns=1thenprint"{reverse on}una soluzione":return
2230 ifns=2thenprint"{reverse on}due soluzioni":return
2240 print"{reverse on} errore "
2250 x1=-br/(2*ar)
2260 ifx1>=l1andx1<=l2thenprint"{reverse on}due soluzioni":return
2270 print"nessuna soluzione":return
2280 rem diventa equazione di primo grado
2290 ifbr=0thenprint"nessuna soluzione":return
2300 x1=-cr/br:x1=int(x1*100000)/100000
2310 if(x1>=l1)and(x1<=l2)thenprint"{reverse on}una soluzione":return
2320 print"{reverse on}nessuna soluzione":return
2330 return
2340 rem giovanni bellu' software 1984
