Risoluzione compito di Sistemi
Classe 3 ET sez. D - I.T.I. "Panetti" - BARI
(a cura del prof. Giuseppe Spalierno - 3 aprile 1999)
Esercizio n.1
1) Le variabili di ingresso sono V e R2 poichè sono assegnati i possibili valori di R1. La variabile di uscita è la potenza P2 dissipata dalla resistenza R2 e calcolata in corrispondenza di ciascun valore di R1 da 0 a 200 Ohm con passo 0.5 Ohm.
2) Dati in lettura V ed R2, si attiva un ciclo per R1 che
assume i valori compresi tra 0 e 200 Ohm con passo 0.5 Ohm. Per ciascun valore di R1 si
calcola l'intensità di corrente I con la formula: I = V/(R1+R2) e successivamente si
determina la potenza dissipata P2 con la formula: P2 = R2*I^2. Si disegna, quindi, un
punto nel piano R1-P2.
In realtà conviene rappresentare la curva della potenza P2 in funzione di R1 attraverso
una spezzata che congiunge i vari punti piuttosto che con i soli punti. Conviene
preliminarmente, individuare il massimo valore di potenza P2 per poter tarare gli assi in
modo opportuno. La massima potenza P2 si ottiene per il minimo valore di R1, cioè per R1
= 0, valore che massimizza la corrente: Imax = V/R2 e quindi: P2max = V^2/R2.
3) Si fornisce il flow-chart del problema.
(in fase di realizzazione)
4) Si fornisce il programma risolutivo del problema, sviluppato in linguaggio Q-Basic:
' *********************************** ' POTENZA.BAS ' 30.03.99 ' ***********************************
COLOR 7, 1: CLS INPUT "INSERISCI IL VALORE DI V (Volt)"; V INPUT "INSERISCI IL VALORE DI R2 (Ohm)"; R2 P2max = V ^ 2 / R2
' Disegna sistema di riferimento con linee tratteggiate SCREEN 12 WINDOW (-40, -P2max * .2)-(200, P2max) FOR x = 0 TO 200 STEP 20 LINE (x, 0)-(x, P2max), 8, , &H3030 NEXT x FOR y = 0 TO P2max STEP .1 * P2max LINE (0, y)-(200, y), 8, , &H3030 NEXT y LINE (0, 0)-(200, P2max), 14, B PSET (0, P2max)
' Determina la potenza P2 e disegna la spezzata LOCATE 1, 1: PRINT "P2(W) "; USING "##.##"; P2max FOR R1 = 0 TO 200 STEP .5 LOCATE 26, 14: PRINT "0"; SPC(30); "R1 (Ohm)" LOCATE 26, 78: PRINT "200"; P2 = R2 * V ^ 2 / (R1 + R2) ^ 2 LINE -(R1, P2) NEXT R1 DO: LOOP WHILE INKEY$ = "" END
Si mostra di seguito il grafico ottenuto per V=10V e R2=100 Ohm.
5) Per realizzare il trace per i valori di R1 99.5 Ohm , 100 Ohm e 100.5 Ohm si compila la seguente tabella:
R1 (Ohm) | P2=R2*V^2/(R1+R2)^2=10.000/(R1+100)^2 (Watt) |
99.5 | 0.251 |
100 | 0.250 |
100.5 | 0.249 |
Esercizio n.2
Commentiamo brevemente ogni istruzione del listato fornito nella traccia.
SCREEN 12:' Modalità grafica VGA
WINDOW (0, 0)-(639, 479): 'finestra sul monitor di coordinate estreme
LINE (0, 0)-(639, 479), 1, B:' disegna il rettangolo massimo di colore blu
DO: LOOP WHILE INKEY$ = "" :' attendi la pressione di un tasto
LINE (50, 50)-(600, 450), , B, &HFF00 :' rettangolo tratteggiato grigio
DO: LOOP WHILE INKEY$ = ""
LINE (100, 100)-(200, 200):'disegna un segmento
LINE -(250, 150):' disegna un segmento dalla line della linea precedente
LINE -(600, 300)
DO: LOOP WHILE INKEY$ = ""
CIRCLE (200, 300), 50:' disegna una circonferenza di raggio 50
DO: LOOP WHILE INKEY$ = ""
PSET (175, 325):' disegna un punto
PSET (225, 325): ' disegna un altro punto
CIRCLE (200, 300), 10, 1: ' disegna naso (circonferenza di raggio 1)
CIRCLE (200, 270), 20, , , , .3: ' disegna bocca (raggio 20, ellisse)
DO: LOOP WHILE INKEY$ = ""
LOCATE 5, 15:' posiziona il cursore alla riga 5 colonna 15
PRINT "Alunno della 3 ET D": 'stampa il messaggio
DO: LOOP WHILE INKEY$ = ""
FOR x = 0 TO 639 STEP 5: ' attiva un ciclo con passo 5
y = 240 + 240 * SIN(x * 6.28 / 640):' funzione sinusoidale positiva
PSET (x, y):' disegna un punto
NEXT x: ' fine ciclo
DO: LOOP WHILE INKEY$ = ""
END: ' fine programma
Si mostra, di seguito, il risultato grafico di questo programma:
Esercizio n.3
1) La struttura IF...THEN...ELSE consente la selezione
composta.
Se la condizione proposta è vera vengono eseguite le istruzioni che troviamo dopo la
parola chiave THEN (allora).
Se la condizione è falsa vengono eseguite le istruzioni che si trovano dopo la parola
chiave ELSE (altrimenti).
Se le varie istruzioni sono scritte una di seguito all'altra, allora la fine della
struttura IF...THEN....ELSE è individuata dal comando END IF.
Esempio: Stampa del valore assoluto della variabile A.
....
IF A<0 THEN print -A ELSE print A
.....
2) La struttura DO....LOOP WHILE consente la realizzazione
di un ciclo, cioè la ripetizione di un gruppo di istruzioni. In particolare la parola
chiave DO individua l'inizio delle istruzioni da ripetere; dopo l'ultima istruzione del
blocco da ripetere si inseriscono le parole: LOOP WHILE seguite dalla condizione.
Se la condizione è vera si ripete l'esecuzione del blocco di istruzioni altrimenti il
programma continua con l'esecuzione dell'istruzione seguente.
Questa struttura esegue un blocco di istruzioni almeno una volta e ne ripete
l'esecuzione se la condizione, posta in coda, è vera.
Esempio: stampa i numeri interi compresi tra 1 e 50.
N=0
DO
N=N+1
PRINT N
LOOP WHILE N<50
.......
3) La struttura FOR ... NEXT consente la ripetizione di un blocco di istruzioni aggiornando una variabile numerica contatore che parte da un valore iniziale ad un valore finale con un incremento assegnato. L'ultima istruzione del ciclo è la NEXT.
Ripetiamo l'esempio precedente.
FOR N=1 TO 50 STEP 1
PRINT N
NEXT N
In questo caso la parola chiave STEP può essere omessa poiché l'incremento è unitario.
4) La struttura DO WHILE....LOOP è una variante alla
struttura esaminata nel caso 2.
Un blocco di istruzioni viene eseguito se la condizione imposta dopo le parole DO WHILE è
vera. Se, invece, è falsa il programma salta all'istruzione successiva alla parola chiave
LOOP. La differenza con la struttura DO...LOOP WHILE sta nel fatto che se la condizione è
subito falsa, il blocco di istruzioni da ripetere non è eseguito neanche una volta.
Ripetiamo lo stesso esempio.
N=0
DO WHILE N<50
N=N+1
PRINT N
LOOP
......
Le strutture dei punti 2) e 4) sembrano, apparentemente,
identiche. Per l'esempio proposto è così.
Se, invece, dicessi: stampare gli interi compresi tra un valore assegnato e 50, la
struttura 2) potrebbe andare in crisi; infatti se il valore assegnato fosse maggiore di
50, diciamo 62, verrebbe stampato solo il valore 62, indesiderato, evidentemente.
Anche l'istruzione FOR...NEXT stamperebbe 62.
La struttura 4) non esegue alcuna stampa perchè rileva subito la condizione falsa.